Essa postagem nao e minha foi retirada do forum do iMasters (http://forum.imasters.com.br/topic/224741-xp-cmdshell/) pelo eriva_br (http://forum.imasters.com.br/user/16361-eriva-br/), achei muito boa e estou colocando aqui para compartilhar e colocando todos os links da fonte do post.Caracteristicas:Nome: XP_CMDSHELLLocalizacao: Banco de dados MasterTipo: Extended ProcedureDescricao: Esta procedure executa uma sequencia de comandos em string do tipo shell no computador onde o sql server esta instalado.Utilidades: listar diretorios; criar, copiar, apagar arquivos; enviar mensagens, etcParametros:'command_string', obrigatorio, e o comando a ser executadono_output, opcional, se colocado indica que nao sera retornado mensagem de saida na execucaoRetornos:retona 0 ou 1: 0-sucesso ou 1-FalhaObservacoes:Obs1.: esta proc trabalha de forma sincrona, os comandos colocados abaixo dela so serao executados apos o termino de sua execucao, ao contrario do comando shell do vb6 que trabalha de forma assincrona, ao ser executado, mesmo sem ter finalizado o comando ja e liberado para a linha subsequente.Obs2.: verificar seguranca, tomar cuidados com SQL Injection, dica do nosso amigo Micoxhttp://www.macoratti.net/sql_inj.htmhttp://www.google.com.br/search?hl=pt-BR&a...ta=lr%3Dlang_ptExemplos de uso:exemplo 1: copiando um arquivodeclare @retorno INT EXEC @retorno = MASTER..xp_cmdshell 'copy C:\Lixo\teste.txt C:\Lixo\testeBKP.txt' select CASE WHEN @retorno = 0 THEN 'COPIADO COM SUCESSO' ELSE 'FALHA NO COMANDO' END as Retornoexemplo 2: listando os arquivos de uma pastadeclare @retorno int EXEC @retorno = master..xp_cmdshell 'dir C:\lixo\' if @retorno = 0 print 'comando executado com EXITO' else print 'FALHA no comando'para testar esse exemplo verificando uma execucao com sucesso e uma com falha, teste passando o caminho correto do arquivo e depois teste definindo o caminho incorretamenteexemplo 3: deletando um arquivoEXEC MASTER..XP_CMDSHELL 'del C:\Lixo\teste.txt'exemplo 4: enviando mensagensEXEC master..xp_cmdshell 'net send /domain:SQL_USERS ''SQL Server sera desligado em em 1 minuto.'exemplo 5: escrevendo em um arquivo textoDECLARE @arqTexto VARCHAR(8000), @caminho VARCHAR(255), @retEcho INT --variavel para verificar se o comando foi executado com exito ou ocorreu alguma falha SET @caminho = 'C:\Lixo\teste.txt' SET @arqTexto = 'ECHO Registro;CAMPO1;CAMPO2;CAMPO3 ' + CONVERT(VARCHAR(30),GETDATE()) + ' >> ' + @caminho --remove caracteres nao aceitos pelo comando ECHO, veja no final do post comentario select @arqTexto = dbo.FU_CONVERTE_TXT(@arqTexto) --escreve no arquivo txt, se ele naum existir sera criado, se existir sera adicionado (incrementado) a partir da ultima linha EXEC @retEcho = MASTER..XP_CMDSHELL @arqTexto, NO_OUTPUT --NO_OUTPUT indica que o comando nao ira retornar alguma possivel mensagem na sua execucao IF (@retEcho <> 0) BEGIN --caso ocorrer algum erro podemos retornar uma mensagem SELECT 'ocorreu erro, verifique se o diretorio existe' as Falha, @retEcho as retEcho ENDexemplo 6: escrevendo arquivo texto, vamos escrever um arquivo texto com alguns campos da tabela authors do banco de dados pubs, atraves de um loop--definindo o banco pubs use pubs; --definindo variaveis declare @arqTexto varchar(8000), @au_fname varchar(50), @au_lname varchar(50), @caminho varchar(255), @au_id varchar(20), @retEcho INT --variavel para verificar se o comando foi executado com exito ou ocorreu alguma falha --definindo o caminho e arquivo que sera escrito, OBS: este caminho deve ser no servidor onde estiver instalado o SQL Server set @caminho = 'C:\Lixo\teste.txt' --setando o menor id para verificacao do loop select @au_id = min(au_id) from authors --while da tabela authors while @au_id is not null begin --buscando os valores dos campos e adicionando nas variaveis select @au_id = au_id,