none
como saber se as linhas de uma tabela foram alteradas RRS feed

  • Pergunta

  • estou precisando montar jobs de movimentacao de linhas de varias tabelas, e nesses jobs preciso saber quais linhas foram movimentadas (insert/update) para jogar essas linhas para outras tabelas
    quarta-feira, 16 de maio de 2012 15:40

Todas as Respostas

  • Henrique, vc poderá fazer este procedimento de várias formas: eu recomendo duas formas:

    A primeira via T-SQL.. Uma query com left join pegando os dados que não existe na tabela destino.

    A segunda seria via SSIS utilizando a task lookup. Dê uma pesquisada sobre a task.

    Abs.


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

    quarta-feira, 16 de maio de 2012 16:01
  • Henrique,

    A primeira opção que o Eduardo indicou ao meu ver é a mais simples e de fácil desenvolvimento.


    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]

    quarta-feira, 16 de maio de 2012 16:55
  • e sobre usar o CDC (SSIS)?
    quarta-feira, 23 de maio de 2012 13:32
  • Henrique boa tarde.

    Até onde vai meus conhecimentos o CDC é apenas para registrar as alterações realizadas em tabelas. Vc até consegue enxergar o que foi alterado, mas o conceito do CDC não é para cruzamentos de dados em grande escala.

    Abs.


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

    quarta-feira, 23 de maio de 2012 17:54
  • exato!
    eu gostaria de ter uma unica tabela sofrendo todos os tipos de movimentacoes (insert, update e delete) e com o CDC verificar esses eventos e disparar acoes atreladas, por exemplo, se teve um insert, disparar uma acao tratando esse insert, se teve 2 updates, disparar duas acoes para tratar isso e por ai vai.

    eh possivel?

    quarta-feira, 23 de maio de 2012 20:20
  • Henrique,

    Uma forma simples de verificar se os dados foram alterados pode ser utilizar a claúsula Output em conjunto com o Update.


    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]

    quarta-feira, 6 de junho de 2012 13:04
  • Você também pode criar triggers onde, após um INSERT, UPDATE ou DELETE, ele insere as linhas que foram modificadas (o que pode ser feito usando os comandos FROM inserted, FROM deleted) em uma nova tabela.
    segunda-feira, 9 de julho de 2012 20:18
  • Henrique,

    opção simples e sem firulas. Crie uma coluna timestamp que sempre que houver algum tipo de alteração nela; aliás esse datatype foi criado justamente para isso nos primórdios do SQL Server.

    http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx

    Exemplo: Crie em sua estrutura de tabelas que precisa monitorar uma coluna chamada DataVersion e coloque ela como timestamp, e quando for realizar o controle das suas cargas, faça a comparação utilizando a coluna DataVersion da coluna source.

    Abs!

    segunda-feira, 9 de julho de 2012 22:46