Articles

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.

Erstellen Sie die Tabelle und fügen Sie Beispieldaten ein

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.

Den Trigger erfolgreich erstellen

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.

Den Trigger erfolgreich testen

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.

Testen Sie den Trigger erneut

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

Skripte abrufen

nächster Tipp-Button

Über den Autor
MSSQLTips Autor Dallas SniderDr. Dallas Snider ist Assistenzprofessor im Fachbereich Informatik an der University of West Florida und verfügt über mehr als 18 Jahre SQL-Erfahrung.
Alle meine Tipps anzeigen
Verwandte Ressourcen

  • Weitere Tipps für Datenbankentwickler…