none
Acessar um Recordset Destination de um Execute SQL task (Update) RRS feed

  • Pergunta

  • Pessoal,

    Alguem tem alguma idéia de como posso fazer um update (sql), componente "Execute SQL Task", usando um "Recordset Destination" previamente preenchido.

    Estou preocupado com a performance pois preciso fazer um update na mesma tabela sendo que faço tratamentos de Lokup para achar códigos em cada linha de dados.

    Sei que dá para usar o "For each loop container" com um "Execute SQL Task" com o código do Update dentro mas ele vai executar para cada linha, como disse me preocupo pois são mais ou menos uns 900.000 a 1.000.000 de registros. por isso que pensei que desse para acessar os campos direto do "Recordset Destination" usando um código TSQL.

    Alguem já passou por isso. De precisar de fazer um update no mesmo pipeline??


    Luciano Montenegro

    quarta-feira, 8 de maio de 2013 20:03

Respostas

  • Luciano, existem duas opções.

    Vc precisará cruzar o seu resultado com uma outra fonte de dados para atualizar os registros deste resultado? Ou será um valor fixo para todas as colunas?

    Se for a primeira opção, vc pode utilizar o Slowly Changing Dimension transformation. Neste volume que vc citou ele tem uma boa perfomance.

    Se for um valor fixo, vc pode utilizar o script component, mas precisará de um pouquinho de conhecimento ou de VB.NET ou de C# para desenvolver o script que atualiza a coluna com um determinado valor.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de maio de 2013 20:37

Todas as Respostas

  • Luciano, existem duas opções.

    Vc precisará cruzar o seu resultado com uma outra fonte de dados para atualizar os registros deste resultado? Ou será um valor fixo para todas as colunas?

    Se for a primeira opção, vc pode utilizar o Slowly Changing Dimension transformation. Neste volume que vc citou ele tem uma boa perfomance.

    Se for um valor fixo, vc pode utilizar o script component, mas precisará de um pouquinho de conhecimento ou de VB.NET ou de C# para desenvolver o script que atualiza a coluna com um determinado valor.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quarta-feira, 8 de maio de 2013 20:37
  • Na verdade seria pegar os dados de código que preenchi nas tabelas de dimensões (no dw), preenchi com Lookup, e o resultado, que é o código esta sendo populado no Recordset, na query não vai haer necessidade de se fazer o cruzamento, a não ser que eu deixe de usar o lookup ai sim teria que fazer um Update com join para acertar os IDs, mas minha intensão seria usar o Recordser populado mesmo,e depóis fazer um update direto.

    Eu tentei usar o SCD mas não não apareceu o campi de ID (que é PK) para que eu pudese configurar como chave, ai eu não entendi e descartei ele.

    Eu pensei em usar o script componente mas vaeio um detalhe, quando eu popular tenho que tomar cuidado com os objetpos de conexão que estaria intanciando pois nos server de produção vou ter que tomar cuidado com atualizações e algumas modificações no framework .NET. e alem disso não queria implementar um código queria utilizar mesmo os objetos do SSIS.

    Se não desse ei já estava pensando em outra saída, utilizando uma tabela (fisica mesmo) mas só para inserir estes dados e depois fazer um update pelo própeio SQL (usando o SL Task), ai sim ele faria em lote. mas vou bater cabeça mais um pouco com o SCD para entender porque ele não me aparece a PK (ID).

    Valeu Eduardo.


    Luciano Montenegro

    quarta-feira, 8 de maio de 2013 21:30
  • Luciano, boa tarde.

    Vc está escolhendo a sua chave com "business key" conforme a imagem abaixo ?

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    quinta-feira, 9 de maio de 2013 17:32
  • Luciano,

    Como você realizou o processo de configuração do SCD?

    Se o volume dos dados é consideravelmente grande, uma possibilidade fazendo direto no SQL Server seria mudar o Recovery Model do Banco para BulkLogged para tentar ajudar na performance.


    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]


    sexta-feira, 10 de maio de 2013 17:08
    Moderador