none
Carregar dados de um banco para outro (Bancos iguais) RRS feed

  • Pergunta

  • Senhores, bom dia!

    Estou com uma pequena dificuldade em criar um pacote onde eu possa carregar as tabelas de um banco de origem, para um outro banco de destino... As estruturas das tabelas dos dois bancos são identicas...

    Ocorre que o meu usuário da aplicação, irá selecionar, quais tabelas irão ser carregadas pelo sistema, imaginei criar uma tabela, onde estarão os nomes das tabelas do SQL e usaria um for each do SSIS, onde teria um DataFlowTask que carregaria tabela por tabela, coforme a seleção do usuário...

    A minha aplicação é um Access que chama o pacote DTSX via query passthrough...

    Abraços a todos,

    Jeferson Araujo

    segunda-feira, 25 de julho de 2011 13:00

Respostas

  • Bom dia Jeferson, tudo bem?

    É possível sim seguir a sua idéia, segue abaixo um teste que fiz no qual implementei ela com sucesso:

    1. Crie e alimente a tabela onde estarão os nomes das tabelas do SQL que o usuário selecionar, isso será feito sua aplicação e não entrei nesse mérito.

    2. Uma vez alimentada essa tabela, no Integration, use-a da seguinte maneira:

    • Crie um data flow task cujo data flow source será a sua tabela SQL com o nome das tabelas.
    • O destino desse data flow source será um recordset destination, que alimenta uma variável do SSIS do tipo Object.
    • Importante que essa variável tenha o scope dela como sendo o pacote!
    • Crie o Foreach Loop Container
    • Configure o Enumerator dele para ser Foreach ADO Enumerator
    • o ADO object source variable será a sua variável Object. Na qual teremos a lista das tabelas que devem ser copiadas.
    • No variable Mappings, crie uma outra variável do tipo String, que receberá o nome da tabela a ser copiada.
    • Crie uma terceira e ultima variável, que armazerá o código SQL, essa variável será String e deve ser tratada como uma expressão, ou seja, mude a propriedade dela para EvaluateAsExpression para TRUE.
    • Configure ela para que receba o seguinte comando: "INSERT INTO BANCO.DBO." + @[User::TabelaNome] + " SELECT * FROM " +  @[User::TabelaNome]
    • Ou seja, para cada tabela, ele montará um script de inserção, já que elas possuem a mesma estrutura, não terá maiores problemas de mapeamento.
    • Feito isso, crie dentro do Foreach Loop Container um Execute SQL Task e configure esse para receber a variável do código SQL.

    Feito! Pode rodar que ele funcionará para a sua necessidade.

    Qualquer dúvida só falar.

    E lembre-se, classifique a resposta!

     

    Att,

    PG

    segunda-feira, 25 de julho de 2011 16:26

Todas as Respostas

  • Bom dia Jeferson, tudo bem?

    É possível sim seguir a sua idéia, segue abaixo um teste que fiz no qual implementei ela com sucesso:

    1. Crie e alimente a tabela onde estarão os nomes das tabelas do SQL que o usuário selecionar, isso será feito sua aplicação e não entrei nesse mérito.

    2. Uma vez alimentada essa tabela, no Integration, use-a da seguinte maneira:

    • Crie um data flow task cujo data flow source será a sua tabela SQL com o nome das tabelas.
    • O destino desse data flow source será um recordset destination, que alimenta uma variável do SSIS do tipo Object.
    • Importante que essa variável tenha o scope dela como sendo o pacote!
    • Crie o Foreach Loop Container
    • Configure o Enumerator dele para ser Foreach ADO Enumerator
    • o ADO object source variable será a sua variável Object. Na qual teremos a lista das tabelas que devem ser copiadas.
    • No variable Mappings, crie uma outra variável do tipo String, que receberá o nome da tabela a ser copiada.
    • Crie uma terceira e ultima variável, que armazerá o código SQL, essa variável será String e deve ser tratada como uma expressão, ou seja, mude a propriedade dela para EvaluateAsExpression para TRUE.
    • Configure ela para que receba o seguinte comando: "INSERT INTO BANCO.DBO." + @[User::TabelaNome] + " SELECT * FROM " +  @[User::TabelaNome]
    • Ou seja, para cada tabela, ele montará um script de inserção, já que elas possuem a mesma estrutura, não terá maiores problemas de mapeamento.
    • Feito isso, crie dentro do Foreach Loop Container um Execute SQL Task e configure esse para receber a variável do código SQL.

    Feito! Pode rodar que ele funcionará para a sua necessidade.

    Qualquer dúvida só falar.

    E lembre-se, classifique a resposta!

     

    Att,

    PG

    segunda-feira, 25 de julho de 2011 16:26
  • Olá Paulo Gomes! Bom dia!

     

    Muito obrigado pela ajuda, no final eu acabei usando Script Task para realizar o meu feito, pois não conseguia configurar as variáveis no Execute SQL Task... Mas a idéia foi a mesma...

     

    Abraços,

    Jeferson Araujo

     

    quinta-feira, 28 de julho de 2011 14:23