none
BCP - Gerando Arquivos Texto RRS feed

  • Pergunta

  •  

    Boa tarde

     

    Por favor estou precisando de uma ajuda com o comando bcp do sql server 2000 master..xp_cmdshell) para gerar arquivos texto, possuo uma procedure que gera o arquivo texto normalmente, porém quando uso outra procedure para chamar essa outra procedure que gerar o txt, os processos se travam e todo o processo fica bloqueado, precisando derrubá-lo usando kill <nro do processo>

     

    Alguém sabe se o comando bcp não permite se chamado por outra procedure?

     

    Estou criando o arquivo texto desta forma:
    EXEC('exec master..xp_cmdshell "BCP Multas.dbo.tempTXT out '+@caminho+' -c -Usa -Psa"')

     

    Obrigado

    Robson Mantovani

    terça-feira, 26 de junho de 2007 19:12

Respostas

  • Robson, Bom dia.

    É a primeira vês que respondo no fórum e espero ser claro e poder te ajudar nesta sua dúvida. O bcp as vezes dá dor de cabeça mesmo e até por isso alguns recomendam o SSIS para executar certas tarefas, mas no seu caso ele responderá bem.

    Respondendo a sua pergunta, o BCP permite sim ser chamado por outra procedure, mas tem que respeitar algumas ordens na execução. Abaixo vou colocar da sua maneira e da maneira que eu fiz e funcionou:

     

    --DA MANEIRA QUE VOCÊ FEZ
    EXEC('exec master..xp_cmdshell "BCP Multas.dbo.tempTXT out '+@caminho+' -c -Usa -Psa"')
    
    --DA MANEIRA QUE EU FIZ
    EXEC('EXEC MASTER.DBO.XP_CMDSHELL ''bcp Multas.dbo.tempTXT out '+@caminho+' -c -Usa -Psa''')
    


    Pode perceber que mudei apenas alguns detalhes, como aspas simples no lugar de duplas e a inclusão da role DBO.

    Não sei como você irá utilizar esta exportação, mas como você tinha mencionado "chamado por outra procedure", tive a liberdade de montar uma procedure que pode ser utilizada no seu caso:

     

    --CRIA A PROCEDURE COM A VARIÁVEL (NO EXEMPLO ESTÁ COMO '@caminho') QUE RECEBER Á O CAMINHO 
    --ONDE O ARQUIVO SERÁ DESCARREGADO (NO EXEMPLO ESTOU UTILIZANDO '.txt'))
    CREATE PROCEDURE NomeProcedure(@caminho nvarchar(100))
    AS
    BEGIN
    	--CRIA A VARIÁVEL(NO EXEMPLO ESTÁ COMO '@BCP') QUE SECEBERÁ AS INSTRUÇÕES DO BCP
    	DECLARE @BCP VARCHAR(500)
    	--ALIMENA A VARIÁVEL @BCP
    	SET @BCP = 'bcp Multas.dbo.tempTXT out '+@caminho+' -c -Usa -Psa'
    	--INFORMA OS PARÂMETROS DE EXECUÇÃO PARA A VARIÁVEL @BCP
    	EXEC MASTER.DBO.XP_CMDSHELL
    	@BCP
    END
    
    --EXECUTA A PROCEDURE NO LOCAL DESEJADO
    EXEC NomeProcedure 'C:\NomeArquivo.txt'
    


    Espero que esta procedure sirva para você ou o ajude neste caso.

    Robson, espero ter te ajudado no seu problema ou ao menos ter te dado um caminho para resolve-lo.

     

    Abraço cara...

     

    • Sugerido como Resposta Eder Costa quarta-feira, 15 de junho de 2011 15:48
    • Marcado como Resposta Eder Costa sexta-feira, 17 de junho de 2011 17:17
    segunda-feira, 13 de junho de 2011 14:40