SQL Server-Trigger nach dem Update für einen bestimmten Wert
Von: Dallas Snider / Aktualisiert: 2015-09-10 | Kommentare (6) / Verwandt: Mehr > Trigger
Problem
Ich muss einen SQL Server-Trigger erstellen, der ausgeführt wird, wenn ein Spaltenwert auf einen bestimmten Wert aktualisiert wird. Wie kann ich das machen?
Lösung
In diesem Tipp zeigen wir Ihnen, wie Sie T-SQL-Anweisungen schreiben, die einen SQLServer-Trigger erstellen, der ausgeführt wird, nachdem wir einen Spaltenwert auf einen bestimmten Wert aktualisiert haben.
Im Bild unten sehen wir, wo wir unsere Beispieltabelle mit dem Namen tblTriggerTest mit einer Primärschlüsselspalte mit dem Namen pkID, einer Datumsspalte mit dem Namen OrderApprovalDateTime und einer Varchar-Spalte mit dem Namen OrderStatus erstellen. Wir füllen die Tabelle mit drei Testdatensätzen, wobei OrderApprovalDateTime auf NULL und OrderStatus auf „Pending“ gesetzt ist.
In diesem Beispiel soll unser Trigger die OrderApprovalDateTime mit dem aktuellen Datum füllen, das von der Funktion getdate() bereitgestellt wird, nachdem der OrderStatus auf „Genehmigt“ aktualisiert wurde. Das T-SQL zum Erstellen dieses Triggers ist unten dargestellt. Es ist sehr wichtig, den INNEREN JOIN in die EINGEFÜGTE Tabelle aufzunehmen, damit nur die aktualisierten Zeilen betroffen sind. Wenn Sie die Klausel WHERE OrderStatus=’Approved‘ selbst verwenden, um die aktualisierten Zeilen zu begrenzen, werden tatsächlich alle Zeilen mit dem OrderStatus-Wert Approved gleichzeitig aktualisiert.
Um den Trigger zu testen, führen wir eine T-SQL UPDATE-Anweisung aus, um den OrderStatus-Wert für die erste Zeile in der Tabelle auf „Genehmigt“ zu setzen (pkID = 1). Nach dem Befehl T-SQL UPDATE führen wir eine T-SQL SELECT-Abfrage aus, um sicherzustellen, dass der Trigger korrekt ausgeführt wird. Die Ausgabe der Anweisungen UPDATE und SELECT wird unten angezeigt.
Beachten Sie oben, dass nur in der ersten Zeile OrderApprovalDateTime auf das aktuelle Datum gesetzt wurde, was unser gewünschtes Verhalten ist. Wir müssen jedoch einen zweiten Test durchführen, um sicherzustellen, dass die richtige Anzahl von Zeilen aktualisiert wurde. In unserem zweiten Test führen wir eine T-SQL UPDATE-Anweisung aus, um den OrderStatus-Wert für die zweite Zeile in der Tabelle (pkID = 2) auf „Genehmigt“ zu setzen. Beachten Sie nach Auswahl aller Datensätze in der Tabelle, dass OrderApprovalDateTime für die zweite Zeile nicht mit OrderApprovalDateTime für die erste Zeile übereinstimmt. Auch dies ist unser gewünschtes Verhalten und alles scheint gut zu sein.
Der vollständige Code für diesen Tipp befindet sich in der Box unten.
use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
Nächste Schritte
Nehmen Sie sich ein paar Minuten Zeit, um herauszufinden, was passiert, wenn Sie den INNEREN JOIN ändern oder der Tabelle weitere Spalten hinzufügen und auslösen.
Lesen Sie auch weitere Tipps ontriggers in SQL Server auf MSSQLTips.com.
- Trigger-Zündreihenfolge in SQL Server erzwingen
- Verhindern versehentlicher Aktualisierungs- oder Löschbefehle aller Zeilen in einer SQL Server-Tabelle
- Überwachung, wenn Trigger für SQL Server deaktiviert oder aktiviert sind
Zuletzt aktualisiert: 2015-09-10
Über den Autor
Alle meine Tipps anzeigen
- Weitere Tipps für Datenbankentwickler…
Leave a Reply