„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich modifizierte Felder effizient aus einem SQL -Server -Update -Trigger effizient abrufen?

Wie kann ich modifizierte Felder effizient aus einem SQL -Server -Update -Trigger effizient abrufen?

Gepostet am 2025-03-22
Durchsuche:233

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

Erhalten Sie nur geänderte Felder für einen SQL -Server -Update Trigger

Einführung

In diesem Szenario streben wir an, einen XML -Bereich nur die geänderten Spaltenwerte zu rufen. Diese Informationen sind für Datenreplikationszwecke von entscheidender Bedeutung.

Ansatz

Option 1: Verwendung dynamischer SQL (deklarativer Ansatz)

Eine Methode beinhaltet die Verwendung dynamischer SQL, um den Code zu erstellen, der die geänderten Spaltenwerte extrahiert. However, this approach can be tedious if the table has a large number of columns.

Option 2: Unpivoting and Joining (Non-Declarative Approach)

A more efficient solution is to unpivot both the inserted and deleted tables, creating a table with fields for the unique key (ContactID), field name (FieldName), and field value (FieldValue). Durch den Beitritt zu diesen beiden Tabellen ist es möglich, alle Zeilen zu identifizieren, bei denen FieldValue sich geändert hat, und uns die geänderten Werte geben. BEGINNEN NoCount einstellen; - Löschte ungebremen Mit deleted_unpvt als ( Wählen Sie ContactID, FieldName, FieldValue Von (SELECT ContactID, Forname, Nachname, EXTN, E -Mail, Alter aus gelöscht) P. Unpivot (FieldValue für FieldName in (Forname, Nachname, EXTN, E -Mail, Alter)) als deleted_unpvt ), - Eingefügt Inised_unpvt als (( Wählen Sie ContactID, FieldName, FieldValue Von (SELECT ContactID, Forname, Nachname, Extn, E -Mail, Alter aus dem eingefügten) P. Unpivot (FieldValue für FieldName in (Forname, Nachname, Extn, E -Mail, Alter)) als eingefügte_unpvt ) - Schließen Sie sich ihnen an und identifizieren Sie Änderungen Einfügen in sample_table_changes (contactId, fieldname, fieldValuewas, fieldvalueis) Wählen Sie Koalesce (D.ContactID, I. contactId) contactId, Koalesce (D.Fieldname, I.Fieldname) Fieldname, D.FieldValue als FieldValuewas, I.fieldValue als Fieldvalueis Von deleted_unpvt d Voller äußerer Join Inised_unpvt i Auf d.contactid = i.contactId und d.fieldname = i.fieldname Wo d.fieldValue i.fieldValue Oder (D.FieldValue ist nicht null und I.fieldValue ist null) Oder (D.FieldValue ist null und i.fieldValue ist nicht null); - Verwenden Sie den Inhalt von sample_table_changes zur Replikation ENDE Go

Dieser nicht deklarative Ansatz verarbeitet Veränderungen, Löschungen und Insertionen effektiv, ohne komplexe dynamische SQL zu verwenden oder bitfield arithmetische Überlaufprobleme zu konfrontieren. Es wird auch nicht durch Änderungen des natürlichen Primärschlüssels beeinflusst, solange eine zusätzliche Guid -Spalte zur Identifizierung verwendet wird.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3