En utlösare är en speciell typ av lagrad procedur som körs när ett INSERT, DELETE eller UPDATE-meddelande ändrar data i en tabell.
SQL Server initierar en AFTER DELETE trigger när en händelse för radering av raderingar inträffar.
Du kan hämta det AFTER DELETE Trigger-skript som används här, så att du kan köra det här skriptet på din lokala SQL Server medan du följer problemet nedan.
Vi vill hålla reda på poster som har tagits bort från anställdstabellen till employee_history-tabellen.
Om någon anställd lämnar företaget kommer hans rekord att raderas från anställdstabellen. Det kommer dock att införas i employee_history-tabellen med hjälp av AFTER DELETE-utlösaren.
Vårt exempel kommer att ha två tabeller: anställd bord och employee_history tabell.
Vi kommer att skapa dessa tabeller och fylla i dem med viss data.
/ * Kontrollera om arbetstagarbordet redan existerar eller inte * / OM OBJECT_ID ('MEDARBETARE') ÄR INTE NULL DROP TABLE MEDARBETARE GO / * Skapa anställd tabell om den inte existerar * / CREATE TABLE EMPLOYEE (EMPID INT PRIMARY KEY, FNAME VARCHAR 25), LNAME VARCHAR (25),) GO / * Populera medarbetarbord med provrader * / INSERT INTO ANSÖKAN (EMPID, FNAME, LNAME) VÄRDEN (500, 'John', 'Smith'), , 'Admas'), (502, 'Eric', 'James'), (503, 'Shaun', 'Marsh') GO / * Skapa employee_history-tabell med samma struktur som anställd tabell utan rader * / IF OBJECT_ID "EMPLOYEE_HISTORY") ÄR INTE NULL DROP TABLE ANSÖKANHISTORI GÅ VÄLJ * I ANSÖKANHISTORI FRÅN MEDARBETARE VAR 1 = 0 - Detta kommer att fylla Employee_history-tabellen med 0 rader GO / * Se tabellposterna från båda tabellerna. Vi har fyra rader i båda tabellerna * / VÄLJ * från ANSÖKARE e - 4 rader VÄLJ * från ARBETEHISTORIEN eh - 0 rader GO
Nu, om någon post som tagits bort från anställd tabellen raderas, måste vi infoga den i employee_history-tabellen för framtida referens. Därför skapar vi i detta fall en AFTER DELETE trigger.
/ * Efter borttagningsutlösare på anställd tabell * / IF OBJECT_ID ('TRG_EmployeeHistory') ÄR INTE NULL DROP TRIGGER TRG_EmployeeHistory GA SKAPA TRIGGER TRG_EmployeeHistory ON dbo.EMPLOYEE EFTER DELETE BEGIN INSERT IN ANTÄNDARHISTORY VÄLJ * FRÅN SLUTSATS END GO
Nu när vi har en AFTER DELETE trigger på anställd bord, kommer vi att radera en rad från anställd bord för att se utlösaren på jobbet.
Den raderade raden kommer att införas i employee_history-tabellen.
/ * Ta bort en post från anställd tabell * / SLÄDDAS FRÅN MEDARBETARE VAR EMPID = 501 GO / * Notera båda tabellerna. Den borttagna posten från anställd sätts in i MEDARBETAREHISTORI * / VÄLJ * från MEDARBEJDA e - 3 rader VÄLJ * från ARBETEHISTORIEN eh - 1 rad GO
De RADERADE bordet är ett magiskt bord som håller raderna som raderas. I AFTER DELETE-utlösaren använde vi tabellen DELETED för att hålla reda på raderade rader. Dessa rader läggs in i EMPLOYEE_HISTORY-tabellen.
Du kan också gå igenom SQL Server: Kodning efter Insert Insert Trigger.