none
Carregamento de arquivo TXT RRS feed

  • Pergunta

  • Boa tarde pessoal!

    Tenho uma rotina de carregamento de arquivos TXT, via Procedure + BulkInsert que estou migrando para SSIS.

    Esses arquivos são carregados em Bancos de Dados diferentes, mas que possuem a mesma estrutura, o que diferencia a base para ser carregada é o nome do arquivo, que contem o nome do Banco de Dados.

    O que estou querendo fazer é a partir do nome do arquivo definir o Banco de Dados que o SSIS vai se conectar para fazer o carregamento, mas não estou conseguindo configurar as opção do OLE DB Destination e do OLE DB Connection, para que ele faça isso.

    Alguem poderia me dar uma força!

     

    Obrigado

    quinta-feira, 17 de novembro de 2011 17:24

Respostas

  • Pedro,

     

    Estamos lidando com 2 problemas:

    1 - Capturar o nome do banco a partir do nome do arquivo: Pessoalmente aqui, o que eu faria, um simples SQL Script task, com algumas funções do SQL Server mesmo, para ir limpando o nome do arquivo e chegar ao nome do banco, fiz algo parecido hoje, porem era com o nome de uma tabela, utilizei um REPLACE + RIGHT e obtive o nome correto, e limpo da tabela

     

    2 - Conexão remota com o banco de dados, aqui, voce deve alterar o expression da sua conexão, ou seja:

    2.1 - Crie uma conexão com um banco existente e que esteja funcionando

    2.2 - Veja este meu post sobre conexão dinamica no SSIS (Estou para fazer um video, mas o tempo anda corrido, qualquer duvida, pode perguntar).

    http://fabrizziocaputo.wordpress.com/2011/10/10/conexao-dinamica-no-ssis/


    Fabrizzio A. Caputo
    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
    sexta-feira, 18 de novembro de 2011 02:45
    Moderador

Todas as Respostas

  • Olá Pedro, boa tarde,

    Primeiramente gostaria de esclarecer uma dúvida: O processo vai ser automático? Se sim que irá fornecer o nome dos banco para SSIS? Será um aplicativo ou manualmente?

    Para resolver esta necessidade eu utilizo variável global. Se quiser, dá uma olhada nos helps sobre variável global em SSIS.

    Fico no aguardo da resposta para detalhar melhor.

    Abs.

    quinta-feira, 17 de novembro de 2011 19:06
  • Edu!

    Esse processo será automático, vou agendar um JOB para rodar de tempos em tempos. Tenho um diretório no Servidor onde esses arquivos são armazenados, e onde aponto o SSIS para buscar os arquivos.

    Eu uso variáveis globais para capturar o nome do arquivo, e armazeno o nome do Banco de Dados em outra variavel global utilizando um substring na variável com o nome do arquivo.

    O que não estou conseguindo fazer é configurar as Expressions do OLE DB Connection para usar o Banco de Dados referente ao arquivo.

    Espero ter esclarecido as dúvidas!

    Abraços!

    quinta-feira, 17 de novembro de 2011 19:16
  • Pedro, não são apenas dois bancos de dados? Porque vc não cria 2 dataflow task um dataflow para um banco e o outro dataflow para outro banco? Não ficaria mais fácil? ou o nome do banco de dados é dinâmico?
    quinta-feira, 17 de novembro de 2011 19:20
  • Edu!

     

    Não são apenas 2 Bancos de Dados e sim 8!

    Pensei nessa possibilidade mas ficaria muito grande o pacote do SSIS e mais difícil de fazer a manutenção.

    E os nomes não são dinâmicos, mas os dados dos arquivos são diferentes assim como o nome, que especifica a qual Banco de Dados ele pertence!

    Se eu conseguir fazer dessa forma posso criar apenas um DataFlow que serve para todos os Bancos de Dados.

     

     

    quinta-feira, 17 de novembro de 2011 19:38
  • Pedro,

     

    Estamos lidando com 2 problemas:

    1 - Capturar o nome do banco a partir do nome do arquivo: Pessoalmente aqui, o que eu faria, um simples SQL Script task, com algumas funções do SQL Server mesmo, para ir limpando o nome do arquivo e chegar ao nome do banco, fiz algo parecido hoje, porem era com o nome de uma tabela, utilizei um REPLACE + RIGHT e obtive o nome correto, e limpo da tabela

     

    2 - Conexão remota com o banco de dados, aqui, voce deve alterar o expression da sua conexão, ou seja:

    2.1 - Crie uma conexão com um banco existente e que esteja funcionando

    2.2 - Veja este meu post sobre conexão dinamica no SSIS (Estou para fazer um video, mas o tempo anda corrido, qualquer duvida, pode perguntar).

    http://fabrizziocaputo.wordpress.com/2011/10/10/conexao-dinamica-no-ssis/


    Fabrizzio A. Caputo
    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
    sexta-feira, 18 de novembro de 2011 02:45
    Moderador
  • Fabrizzio, bom dia!

    Eu já estava conseguindo gravar o nome do Banco de Dados em uma variável, para isso usei um script task em VB e usei o substring.

    Olhei o seu artigo e consegui configurar a conexão dinâmica!

    Configurei as expressions do Innitial catalog e Server Name e funcionou perfeitamente.

     

    Muito Obrigado pela ajuda

    Abraços

    sexta-feira, 18 de novembro de 2011 13:08