none
BCP via SSIS RRS feed

  • Pergunta

  • Boa tarde.

    Estou "quebrando a cabeça" com uma tarefa aparentenmente simples...tenho um comando que usa o BCP para importar um arquivo:

    C:\teste\bin\bcp.exe minhaTabela in arquivo.csv -SmeuServer -UmeuUser -PminhaSenha -t, -c -b1000
    Executando via bat o processo funciona. Estou migrando para o SSIS agora, usando o componente Execute Process Task.

    Configuração:
    Executable: C:\teste\bin\bcp.exe
    Arguments: minhaTabela in arquivo.csv -SmeuServer -UmeuUser -PminhaSenha -t, -c -b1000

    Bom, via SSIS isso não funciona. Erro:
    [Execute Process Task] Error: In Executing "C:\teste\bin\bcp.exe" "minhaTabela in arquivo.csv -SmeuServer -UmeuUser -PminhaSenha -t, -c -b1000" at "", The process exit code was "-1" while the expected was "0".

    Tenho que configurar algo mais?


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    terça-feira, 29 de novembro de 2011 19:46

Respostas

  • Pessoal, consegui resolver...o "truque" é conseguir debugar...porque (pelo menos no meu caso) não tem nenhuma particularidade pra chamar o BCP via SSIS.
      
    Para investigar o problema:
    - Crie uma variável do pacote
    - No componente "Execute Process Task" que vai executar o BCP, configure a propriedade Standard Output Variable especificando sua nova variável
    - No componente "Execute Process Task" que vai executar o BCP, Configure a propriedade FailTaskIfReturnCodeIsNotSucessValue para FALSE
    - Crie um Script task que será executado após o processamento do componente que executa o BCP (Execute Process Task). Dentro deste script task, programe uma linha em VB ou C# para exibir o valor da variável que você criou.
    Pronto, você saberá o motivo pelo qual o comando não está sendo executado. No meu caso, o problema estava acontecendo porque eu não estava especificando o caminho completo do arquivo a ser importado.
    Antes:
    Dbxxxx.dbo.Tbxxx_TEMP in teste.csv -Sxxxxx -Uxxxxx -Pxxxxx -t, -c -b1000
     
    Depois:
    Dbxxxx.dbo.Tbxxx_TEMP in C:\xxx\Weslley\Tbxxx\teste.csv -Sxxxxx -Uxxxxx -Pxxxxx -t, -c -b1000
     
    Obrigado pelas dicas!

    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Weslley Moura quarta-feira, 30 de novembro de 2011 13:21
    quarta-feira, 30 de novembro de 2011 13:04

Todas as Respostas

  • Weslley,

    Você já tentou utilizar o componente SQL Server Task?

    O BCP é uma ferramenta de linha de comando bastante antiga mas muito utilizado, ela não possui compatibilidade com o SSIS, talvez este seja o problema.

    Tem também o componente Execute DTS 2000 Package!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    terça-feira, 29 de novembro de 2011 20:07
    Moderador
  • O problema é que preciso "chamar" um programa (no caso o BCP)...


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    quarta-feira, 30 de novembro de 2011 11:26
  • Wasley,

     

    Pelo SQL Server, voce pode chamar via xp_cmdshell, ou seja, pelo SSIS voce pode utilizar uma SQL Server Task e colocar o mesmo comando, tera o mesmo comportamento.

     

    Porem, via SSIS, programas podem ser chamados a partir do componente Execute Process Task, porem creio que adaptar o BCP para utilizar este componente, sera bem complicado, e nem sei se é possivel.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quarta-feira, 30 de novembro de 2011 11:33
    Moderador
  • Perfeito. Mas estou em um ambiente sem permissão para executar xp_cmdshell.

    Tenho que executar diretamente o programa.
    Acho que terei que procurar outra solução...


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    quarta-feira, 30 de novembro de 2011 11:41
  • Waslley,

     

    Veja esta outra thread, é um caso semelhante ao seu, com alguns exemplos e correções...

    http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/0f56dd82-acae-4f39-a405-b07319f62975/


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quarta-feira, 30 de novembro de 2011 11:43
    Moderador
  • Pessoal, consegui resolver...o "truque" é conseguir debugar...porque (pelo menos no meu caso) não tem nenhuma particularidade pra chamar o BCP via SSIS.
      
    Para investigar o problema:
    - Crie uma variável do pacote
    - No componente "Execute Process Task" que vai executar o BCP, configure a propriedade Standard Output Variable especificando sua nova variável
    - No componente "Execute Process Task" que vai executar o BCP, Configure a propriedade FailTaskIfReturnCodeIsNotSucessValue para FALSE
    - Crie um Script task que será executado após o processamento do componente que executa o BCP (Execute Process Task). Dentro deste script task, programe uma linha em VB ou C# para exibir o valor da variável que você criou.
    Pronto, você saberá o motivo pelo qual o comando não está sendo executado. No meu caso, o problema estava acontecendo porque eu não estava especificando o caminho completo do arquivo a ser importado.
    Antes:
    Dbxxxx.dbo.Tbxxx_TEMP in teste.csv -Sxxxxx -Uxxxxx -Pxxxxx -t, -c -b1000
     
    Depois:
    Dbxxxx.dbo.Tbxxx_TEMP in C:\xxx\Weslley\Tbxxx\teste.csv -Sxxxxx -Uxxxxx -Pxxxxx -t, -c -b1000
     
    Obrigado pelas dicas!

    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Marcado como Resposta Weslley Moura quarta-feira, 30 de novembro de 2011 13:21
    quarta-feira, 30 de novembro de 2011 13:04