"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como recuperar com eficiência apenas campos modificados de um gatilho de atualização do SQL Server?

Como recuperar com eficiência apenas campos modificados de um gatilho de atualização do SQL Server?

Postado em 2025-03-22
Navegar:855

How to Efficiently Retrieve Only Modified Fields from an SQL Server Update Trigger?

obtendo apenas campos modificados para uma atualização do servidor sql trigger

introdução

Neste cenário, pretendemos recuperar um XML contendo apenas os valores de coluna modificados ao executar uma atualização em um tatidado em um SQ Somb. Esta informação é crucial para fins de replicação de dados. No entanto, essa abordagem pode ser tediosa se a tabela tiver um grande número de colunas. Ao ingressar nessas duas tabelas, é possível identificar quaisquer linhas em que o FieldValue mudou, dando -nos os valores modificados. COMEÇAR Definir nocorre em; - Não excluído Com deleted_unpvt como ( Selecione ContactId, FieldName, FieldValue De (selecione contactId, curename, sobrenome, extn, e -mail, idade de exclusão) p Unpivot (FieldValue para FieldName In (Forename, Sobrenome, Extn, Email, Age)) como Deleted_Unpvt ), - Não inserido insered_unpvt como ( Selecione ContactId, FieldName, FieldValue De (selecione contactId, curename, sobrenome, extn, e -mail, idade de inserido) p Unpivot (FieldValue para FieldName In (Forename, Sobrenome, Extn, Email, Age)) como Inserd_Unpvt ) - Junte-se a eles e identifique mudanças Inserir em sample_table_changes (contactId, fieldname, fieldvaluewas, fieldvalueis) Selecione Coalesce (D.Contactid, i.Contactid) ContactId, Coalesce (D.FieldName, I.FieldName) FieldName, D.FieldValue como FieldValuewas, I.FieldValue como FieldValueis De deleted_unpvt d Junção externa completa inserd_unpvt i Em D.ContactId = i.ContactId e D.FieldName = i.FieldName Onde D.FieldValue I.FieldValue Ou (D.FieldValue não é nulo e I.FieldValue é nulo) Ou (D.FieldValue é nulo e I.FieldValue não é nulo); - Use o conteúdo de sample_table_changes para replicação FIM GO

Esta abordagem não declarativa lida com alterações, deleções e inserções de maneira eficaz, sem usar o SQL dinâmico complexo ou os problemas de transbordamento aritmético de Bitfield. Também não é afetado por mudanças na chave primária natural, desde que uma coluna GUID adicional seja usada para identificação.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3