Ein Trigger ist ein spezieller Typ einer gespeicherten Prozedur, die ausgeführt wird, wenn eine INSERT-, DELETE- oder UPDATE-Anweisung Daten in einer Tabelle ändert.
SQL Server initiiert ein NACH DELETE-Auslöser wann immer ein Löschanweisungsereignis auftritt.
Sie können das hier verwendete AFTER DELETE-Auslöserskript herunterladen, damit Sie dieses Skript auf Ihrem lokalen SQL Server ausführen können, während Sie das folgende Problem befolgen.
Wir möchten die Datensätze aus der Employee-Tabelle in der Employee_history-Tabelle löschen.
Wenn ein Mitarbeiter das Unternehmen verlässt, wird sein Datensatz aus der Mitarbeitertabelle gelöscht. Sie wird jedoch mit dem AFTER DELETE-Trigger in die employee_history-Tabelle eingefügt.
Unser Beispiel wird zwei Tabellen haben: Mitarbeiter Tisch und mitarbeiterhistorie Tabelle.
Wir erstellen diese Tabellen und füllen sie mit Daten auf.
/ * Prüfe, ob die Employee-Tabelle bereits existiert oder nicht * / WENN OBJECT_ID ('EMPLOYEE') NICHT NULL DROP TABLE EMPLOYEE GO ist / * Create Employee-Tabelle, falls sie nicht existiert * / CREATE TABLE EMPLOYEE (EMPID INT PRIMARY KEY, FNAME VARCHAR ( 25), LNAME VARCHAR (25),) GO / * Employee-Tabelle mit Musterzeilen füllen * / INSERT IN EMPLID, FNAME, LNAME) VALUES (500, 'John', 'Smith'), (501, 'Alex') , 'Admas'), (502, 'Eric', 'James'), (503, 'Shaun', 'Marsh') GO / * Anlegen der employee_history-Tabelle mit derselben Struktur wie die Employee-Tabelle ohne Zeilen * / IF OBJECT_ID ( 'EMPLOYEE_HISTORY') IST NICHT NULL DROP TABLE EMPLOYEE_HISTORY GO SELECT * IN EMPLOYEE_HISTORY FROM EMPLOYEE WHERE 1 = 0 - Dies füllt die Employee_history-Tabelle mit 0 Zeilen. GO / * Zeigt die Tabellensätze beider Tabellen an. Wir haben vier Zeilen in beiden Tabellen * / SELECT * von EMPLOYEE e - 4 Zeilen SELECT * von EMPLOYEE_HISTORY eh - 0 Zeilen GO
Wenn nun ein Datensatz gelöscht wird, der aus der Employee-Tabelle gelöscht wurde, müssen wir ihn zur späteren Bezugnahme in die employee_history-Tabelle einfügen. In diesem Fall erstellen wir daher einen AFTER DELETE-Trigger.
/ * After Delete Auslöser für Mitarbeitertabelle * / IF OBJECT_ID ('TRG_EmployeeHistory') IST NICHT NULL DROP TRIGGER TRG_EmployeeHistory GO CREATE TRIGGER TRG_EmployeeHistory ON dbo.EMPLOYEE NACH DEM LÖSCHEN LÖSCHEN IN EMPLOYEE_HISTORY SELECT * DELETET
Nachdem wir nun einen AFTER DELETE-Auslöser für die Employee-Tabelle haben, werden wir eine Zeile aus der Employee-Tabelle löschen, um den Auslöser bei der Arbeit zu sehen.
Die gelöschte Zeile wird in die employee_history-Tabelle eingefügt.
/ * Einen Datensatz aus der Employee-Tabelle löschen * / DELETE FROM EMPLOYEE WHERE EMPID = 501 GO / * Beachten Sie beide Tabellen. Der gelöschte Datensatz des Mitarbeiters wird in EMPLOYEE_HISTORY * / SELECT * von EMPLOYEE e - 3 Zeilen SELECT * von EMPLOYEE_HISTORY eh - 1 row GO eingefügt
Das GELÖSCHT table ist eine magische Tabelle, die die Zeilen enthält, die gelöscht werden. Im AFTER DELETE-Trigger haben wir die DELETED-Tabelle verwendet, um die gelöschten Zeilen zu verfolgen. Diese Zeilen werden in die Tabelle EMPLOYEE_HISTORY eingefügt.
Sie können auch durch SQL Server gehen: Codieren des After-Insert-Auslösers.