Ich habe eine Tabelle, die in jede Nacht eingefügt wird, die eine Momentaufnahme der Daten ist. Zu jedem Zeitpunkt können sich die Daten in den Spalten ändern (AccountNo bleibt gleich, RunKey wird um 1 inkrementiert und RunDate wird um 1 Tag erhöht; alle anderen Spalten können ad hoc geändert werden). Unten ist ein Beispiel dafür, wie die Daten aussehen:Wie kann ich den Spaltennamen extrahieren, wenn sich die Daten in SQL Server 2014 ändern?
|AccountNo | RunKey | RunDate | Address | Salary | PromotionDate| ---------------------------------------------------------------------------- | 12345 | 2 | 06/20/2017 | 123 Main Street | 60,000 | 01/15/2017 | | 12345 | 3 | 06/21/2017 | 123 Main Street | 60,000 | 01/15/2017 | | 12345 | 4 | 06/22/2017 | 123 Main Street | 65,000 | 06/21/2017 |
einen LAG-Funktion und CASE-Ausdruck verwendet ich in der Lage bin, um zu bestimmen, wann eine Änderung ist (Flag von 1 bedeutet, es geändert):
|AccountNo | RunKey | RunDate | Address | AddressLAG |AddressFlag| Salary | SalaryLAG |SalaryFlag| PromotionDate|PromotionDateLag|PromotionFlag| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | 12345 | 2 | 06/20/2017 | 123 Main Street | 123 Main Street | 0 | 60,000 | 60,000 | 0 | 01/15/2017 | 01/15/2017 | 0 | | 12345 | 3 | 06/21/2017 | 123 Main Street | 123 Main Street | 0 | 60,000 | 60,000 | 0 | 01/15/2017 | 01/15/2017 | 0 | | 12345 | 4 | 06/22/2017 | 123 Main Street | 123 Main Street | 0 | 65,000 | 60,000 | 1 | 01/15/2017 | 06/21/2017 | 1 |
ich brauche nur die geänderten Datensätze in eine neue Tabelle und die neue Tabelle wie folgt aussehen einzufügen:
| RunKey | AccountNo | ChangedCol | PrevRunDate | RunDate | PrevValue | NewValue | ------------------------------------------------------------------------------------------- | 4 | 12345 | Salary | 06/21/2017 | 06/22/2017 | 60,000 | 65,000 | | 4 | 12345 | PromotionDate | 06/21/2017 | 06/22/2017 | 01/15/2017 | 06/21/2017 |
Es wird ein neuer Datensatz für jede Spalte Änderung sein. Wenn sich also mehrere Spalten ändern, wird jede Änderung in einer neuen Zeile dokumentiert. Hier brauche ich Hilfe, ich weiß nicht, wie man nur geänderte Spalten dynamisch in die neue Tabelle einfügt.
Sind Sie sicher, dass Sie Änderungen in der Zeilenversion oder im Auditing vornehmen möchten?Sie können das wirklich einfach mit 'except' sehen. – scsimon
Ich bin offen für Ideen. Das war nur mein erster Gedanke und niemand, mit dem ich arbeite, schlug etwas anderes vor. Ich änderte die Daten, um es zu vereinfachen, aber ich arbeite mit Gebühren und Daten und das Problem ist, dass unser Manager fragen kann, warum sich etwas geändert hat und wir so viele Datensätze haben, die wir nicht erzählen können. Deshalb erstellen wir diese Tabelle, die alle verfolgt Änderungen, so dass wir zu jedem Zeitpunkt zurückgehen und sehen können, wo es eine Veränderung gab und was die Veränderung war. – bm11
Nun, Sie schwenken die Daten in ein neues Format für Auditing. Dies kann für Sie in Ordnung sein, aber die Frage wäre, wofür würden Sie diese Daten verwenden? Wie möchten Sie es abfragen? Was für Aggregate/etc würdest du tun? Wenn Sie dieses Format verwenden, ist es schwierig, eine Verbindung zu einem beliebigen Dataset herzustellen, was zu einigen Problemen führen kann. Die erste Frage lautet also: Was wirst du damit machen? Das würde helfen zu bestimmen, ob dies ein logischer Ansatz ist. IMHO – scsimon