En utlösare är en speciell typ av lagrad procedur som utförs när ett INSERT, DELETE eller UPDATE-meddelande ändrar data i en tabell.
SQL Server initierar en EFTER INSERT-utlösaren när en händelse för inlägget inträffar.
Hämta AFTER INSERT TRIGGER-skriptet som används här med exempel så att du kan exekvera skriptet på din SQL Server-maskin medan du följer problemet nedan.
Vårt mål är att när en post läggs in i anställdabellen vill vi också att den här posten ska infogas i employee_backup-tabellen. Vårt exempel kommer att ha två tabeller: anställd och employee_backup. Vi kommer att skapa dessa tabeller och fylla i dem med viss data.
/ * Kontrollera om anställd tabell redan finns * / OM OBJECT_ID ('MEDARBETARE') ÄR INTE NULL DROP TABLE ARBETARE 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 och synkronisera employee_backup-tabellen med poster från anställd tabellen så att båda tabellerna kommer att ha samma poster * / OM OBJECT_ID ('EMPLOYEE_BACKUP') ÄR INTE NULL DROP TABLE EMPLOYEE_BACKUP VÄLJ * I MEDARBETARE FRÅN MEDARBETARE GÅ / * Se tabellposterna från båda tabellerna. Vi har fyra rader i båda tabellerna * / VÄLJ * från ANSÖKARE VÄLJ * från EMPLOYEE_BACKUP GO
Nu måste vi hålla båda tabellerna synkroniserade så att när en post sätts in i MEDARBETARE ska den automatiskt sättas in i EMPLOYEE_BACKUP. I så fall behöver vi en INTER-INSERT-utlösare.
Vi kommer att skapa en EFTER INSERT-utlösaren på anställd bord.
/ * Efter Infoga utlösare på anställd tabell * / IF OBJECT_ID ('TRG_InsertSyncEmp') ÄR INTE NULL DROP TRIGGER TRG_InsertSyncEmp GÅ CREATE TRIGGER TRG_InsertSyncEmp ON dbo.EMPLOYEE EFTER INSERT SOM BEGIN INSERT INTO EMPLOYEE_BACKUP VÄLJ * FRÅN INSERTED END GO
Vår trigger har skapats med framgång. Nu lägger vi in en post i anställd tabellen, och vi kommer att ha samma post i employee_backup-tabellen eftersom vi har skapat en AFTER INSERT-utlösare på anställd tabellen.
De INSERTEDbordet är ett specialbord som bara håller de rader som sätts in; Därför använder vi denna INSERTED-tabell för att hålla båda tabellerna synkroniserade. Vi sätter in raderna från INSERTED-tabellen som är befolkade med inläggsdeklarationer som gjorts på anställd bord i employee_backup-tabellen.
/ * Lägg in en post i anställd tabellen. En Insert-utlösare kommer att utföras här, och samma post kommer att införas i employee_backup-tabellen * / INSERT INTO ANSÖKAN (EMPID, FNAME, LNAME) VÄRDER (504, "Vish", "Dalvi")
/ * Se båda tabellerna synkroniseras med samma antal poster * / VÄLJ * från ANSÖKARE VÄLJ * från EMPLOYEE_BACKUP GO
AFTER INSERT-utlösaren på EMPLOYEE-tabellen, så snart den möter ett inläggsförklaring, påminner omedelbart ett annat inläggsförklaring för att infoga samma rad i EMPLOYEE_HISTORY-tabellen.