Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Erkennen, welche Spalten aktualisiert werden

Testen Sie unsere 2019 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Um zu erkennen, welche Spalten bei einer UPDATE-Anweisung betroffen sind, kann das über die Funktionen UPDATE() und COLUMNS_UPDATED() ermittelt werden.
04:50

Transkript

Die nächste Herausforderung besteht darin, herauszufinden, welche Spalten in der UPDATE- Anweisung aktualisiert wurden. Zu diesem Zweck gibt es zwei Funktionen und zwar einmal die UPDATE-Funktion und einmal die COLUMNS_UPDATED-Funktion. Beide liefern mir die Information, welche Spalten in einer UPDATE-Anweisung mit aufgenommen wurden nach dem SET-Teil um entscheiden zu können, ob ich dann gewisse Aktionen im Trigger auch ausführen möchte oder nicht. Ich zeige Ihnen einfach mal, wie es geht, so kompliziert ist es gar nicht. Zunächst einmal zeige ich Ihnen mit diesem Skript die UPDATE-Funktion. Ich lege dafür eine Datenbank inklusive Tabelle an und füge in dieser Tabelle einige Zeilen an. Dann entsprechend einen Trigger. In dem Trigger kommt die UPDATE-Funktion zum Einsatz und ihr einziger Parameter ist die Spalte, für die ich mich konkret interessiere. Das heißt, ich kann solche IF-Abfragen schreiben: Für den Fall, dass die TraceID aktualisiert wurde, gib den Text aus oder führe die Aktion durch, für den Fall, dass die Status- Spalte aktualisiert wurde, geb den Text aus oder führe die Aktion aus. Damit kann ich sehr differenziert prüfen welche Spalte hier in den UPDATE- Anweisungen tatsächlich vorkommt. Zum Beispiel hier bekomme ich als Ergebnis TraceID wurde aktualisiert und das stimmt auch. Dann kann ich es mit dem nächsten Statement versuchen und da bekomme ich den Text, dass Trace und StatusID aktualisiert wurden. Wenn ich das Ganze nochmal ausführe, bekomme ich natürlich immer wieder den gleichen Text, weil es ist immer das gleiche Statement. Die UPDATE-Funktion prüft nur, ob die Spalten hier beim SET mit angegeben wurden, nicht, ob die Daten sich tatsächlich ändern. Der Vorteil dieser Funktion ist, dass ich sehr leicht und offensichtlich abfragen kann, welche Spalte entsprechend vorhanden ist. Etwas unhandlich wird, wenn es sehr viele Spalten sind, die zusammen im Kombination möglicherweise aktualisiert wurden, dann bekomme ich natürlich hier eine etwas umfangreichere Auflistung an Spalten. Das heißt, ich muss dann Update so und so, oder so und so und so weiter, das heißt, ich habe mehrere Aufrufe von UPDATE hier. Das kann ich mit der nächsten Funktion ein bisschen eleganter machen, allerdings ist das nicht mehr ganz so gut lesbar. Die nächste Funktion ist nämlich die COLUMNS_UPDATED-Funktion. Die liefert mir ein binäres Muster von den Spalten, die in der UPDATE-Anweisung in der Tat mit Werten versehen werden. Um sie zu demonstrieren lege ich zunächst eine neue Datenbank mit einer Tabelle und ein paar Zeilen an und danach den Trigger. Der Trigger gibt mir im Wesentlichen nur den Inhalt der COLUMNS_UPDATED-Funktion aus. Den muss ich formatieren, damit ich ihn vernünftig lesen kann, zum Beispiel als Hexadezimalzahl, und ich kann dann hier zum Beispiel prüfen, indem ich binäre Operation verwende, ob die zweite, vierte oder was auch immer, ob der entsprechende Bit gesetzt wurde um dann zu entscheiden, welche Spalte aktualisiert wurden. Generell gilt, die erste Spalte von links hat den Wert 1, die zweite den 2, die dritte 4 und die Ende nach dem Muster 2 (n - 1) und damit kann ich quasi ein binäres Muster mir errechnen, auf das ich prüfen kann, um zum Beispiel zu prüfen, ob eine Reihe von Spalten entsprechend in der UPDATE-Anweisung vorkommen. Mit dem ersten Spalten geht natürlich auch. Wenn ich zwei Spalten aktualisiere, dann bekomme ich die Maske 6. Und 6 setzt sich aus den beiden Werten zusammen, damit ist es die zweite und dritte Spalte und wenn ich die kleine Tabelle hier oben gehe, sehen Sie zweite und dritte Spalte ist in der Tat die TraceID und die Status-Spalte. Das heißt, damit kann ich komplexere Muster an Spalten schneller erfassen. Allerdings es basiert mehr oder minder auf der Reihenfolge der Spalten. Damit muss ich aufpassen, dass sich die Struktur der unterliegenden Tabelle ändert, muss ich hier möglicherweise sehr genau nachrechnen, wie das binäre Muster aussieht. Insofern diese Funktion ist für Tabellen, wenn es darum geht, komplexe Muster an Spalten zu erkennen, was sich geändert hat, hat aber ein bisschen den Nachteil, dass es natürlich schwer zu entwickeln ist. Was ich natürlich machen kann, ich kann den Wert schlicht und einfach protokollieren und dann zu sagen, die Spalten haben sie sich geändert dafür ist es eigentlich ganz gut geeignet, dann aber für einzelne Werte muss man exakt und sehr präzis arbeiten, sonst wird sehr schnell unübersichtlich.

SQL Server 2016: Triggers, Stored Procedures und Funktionen

Nutzen Sie in SQL Server Trigger, gespeicherte Prozeduren, Late Binding, Fehlerbehandlung sowie Scalar- und Tabellenwertfunktionen.

3 Std. 12 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:08.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!