Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
DML-utlösaren är en särskild typ av lagrad procedur som automatiskt börjar gälla när en DML-händelse (datamanipuleringsspråk) äger rum som påverkar tabellen eller vyn som definieras i utlösaren. DML-händelser inkluderar INSERT, UPDATEeller DELETE -instruktioner. DML-utlösare kan användas för att framtvinga affärsregler och dataintegritet, köra frågor mot andra tabeller och inkludera komplexa Transact-SQL-instruktioner. Utlösaren och uttrycket som utlöser den behandlas som en enda transaktion, som kan återkallas inifrån utlösaren. Om ett allvarligt fel upptäcks (till exempel otillräckligt diskutrymme) återställs hela transaktionen automatiskt.
Fördelar
DML-utlösare liknar begränsningar eftersom de kan framtvinga entitetsintegritet eller domänintegritet. I allmänhet bör entitetsintegritet alltid upprätthållas på den lägsta nivån av index som är en del av PRIMARY KEY och UNIQUE begränsningar eller skapas oberoende av begränsningar. Domänintegritet bör framtvingas genom CHECK begränsningar och referensintegritet (RI) ska tillämpas genom FOREIGN KEY begränsningar. DML-utlösare är mest användbara när de funktioner som stöds av begränsningar inte kan uppfylla programmets funktionella behov.
I följande lista jämförs DML-utlösare med begränsningar och identifierar när DML-utlösare har fördelar jämfört med begränsningar.
DML-utlösare kan överlappa ändringar via relaterade tabeller i databasen. Dessa ändringar kan dock köras mer effektivt med hjälp av sammanhängande begränsningar för referensintegritet.
FOREIGN KEYbegränsningar kan endast verifiera ett kolumnvärde med en exakt matchning till ett värde i en annan kolumn, såvida inteREFERENCESsatsen definierar en sammanhängande referensåtgärd.De kan skydda mot skadliga eller felaktiga
INSERT,UPDATEochDELETEoperationer, samt framtvinga andra begränsningar som är mer komplexa än begränsningar definierade medCHECKbegränsningar.Till skillnad från
CHECKbegränsningar kan DML-utlösare referera till kolumner i andra tabeller. En utlösare kan till exempel använda en parameter från enSELECTannan tabell för att jämföra infogade eller uppdaterade data och utföra andra åtgärder, till exempel ändra data och/eller visa ett användardefinierat felmeddelande.De kan utvärdera tillståndet för en tabell före och efter en dataändring och vidta åtgärder baserat på den skillnaden.
Flera DML-utlösare av samma typ (
INSERT,UPDATEellerDELETE) i en tabell tillåter flera, olika åtgärder som svar på samma ändringsinstruktor.Begränsningar kan endast kommunicera om fel via standardiserade systemfelmeddelanden. Om programmet kräver eller kan dra nytta av anpassade meddelanden och mer komplex felhantering måste du använda en utlösare.
DML-utlösare kan förhindra eller återkalla ändringar som bryter mot referensintegriteten och därmed avbryta försöket att ändra data. En sådan utlösare kan träda i kraft när du ändrar en sekundärnyckel och det nya värdet inte matchar dess primära nyckel. Dock brukar
FOREIGN KEYbegränsningar vanligtvis användas för detta ändamål.Om det finns begränsningar i utlösartabellen kontrolleras de efter utlösarkörningen
INSTEAD OFmen före utlösarkörningenAFTER. Om begränsningarna överträds återställs utlösaråtgärdernaINSTEAD OFoch utlösarenAFTERkörs inte.
Typer av DML-utlösare
AFTER-utlösare
              AFTER utlösare körs efter att åtgärden för instruktionen INSERT, UPDATE, MERGE, eller DELETE har utförts. 
              AFTER utlösare körs aldrig om en begränsningsöverträdelse inträffar. Därför kan dessa utlösare inte användas för bearbetning som kan förhindra begränsningsöverträdelser. För varje INSERT, UPDATE eller DELETE åtgärd som anges i en MERGE instruktion, aktiveras den motsvarande triggern för varje DML-operation.
I STÄLLET för utlösare
              INSTEAD OF utlösare åsidosätter standardåtgärderna för den utlösande satsen. Därför kan de användas för att utföra fel- eller värdekontroll på en eller flera kolumner och utföra andra åtgärder innan du infogar, uppdaterar eller tar bort raden eller raderna. När till exempel värdet som uppdateras i en timlönskolumn i en lönetabell överskrider ett angivet värde kan en utlösare definieras för att antingen skapa ett felmeddelande och återställa transaktionen eller infoga en ny post i en spårningslogg innan posten infogas i lönetabellen. Den främsta fördelen med INSTEAD OF utlösare är att de aktiverar vyer som inte skulle vara uppdaterade för att stödja uppdateringar. En vy som baseras på flera bastabeller måste till exempel använda en INSTEAD OF utlösare för att stödja infogningar, uppdateringar och borttagningar av referensdata i mer än en tabell. En annan fördel med INSTEAD OF utlösare är att de gör att du kan koda logik som kan avvisa delar av en batch samtidigt som andra delar av en batch kan lyckas.
I den här tabellen jämförs funktionerna för AFTER utlösarna och INSTEAD OF .
| Funktion | 
              AFTER utlösare | 
              INSTEAD OF utlösare | 
|---|---|---|
| Tillämplighet | Tabeller | Tabeller och vyer | 
| Kvantitet per tabell eller vy | Flera per utlösande åtgärd (UPDATE, DELETEoch INSERT) | 
En per utlösande åtgärd (UPDATE, DELETEoch INSERT) | 
| Sammanhängande referenser | Inga begränsningar gäller | 
              INSTEAD OF UPDATE och DELETE utlösare tillåts inte för tabeller som är mål för kaskaderade begränsningar av referentiell integritet. | 
| Avrättning | Efter: Villkorsbearbetning Deklarativa referensåtgärder inserted och deleted tabellskapandeUtlösande åtgärd  | 
Före: Villkorsbearbetning I stället för: Utlösande åtgärd Efter skapandet av inserted och deleted tabeller | 
| Körningsordning | Första och sista exekveringen kan specificeras | Ej tillämpligt | 
              kolumnreferenser för varchar(max), nvarchar(max) och varbinary(max) i inserted tabeller och deleted | 
Tillåtet | Tillåtet | 
              text, ntext, och bild kolumnreferenser i inserted och deleted tabeller | 
Tillåts inte | Tillåtet | 
CLR-utlösare
En CLR-utlösare (Common Language Runtime) kan vara antingen en AFTER eller INSTEAD OF utlösare. En CLR-utlösare kan också vara en DDL-utlösare (Data Definition Language). I stället för att köra en Transact-SQL lagrad procedur kör en CLR-utlösare en eller flera metoder skrivna i hanterad kod som är medlemmar i en sammansättning som skapats i .NET Framework och laddats upp i SQL Server.
Relaterade uppgifter
| Aktivitet | Artikel | 
|---|---|
| Beskriver hur du skapar en DML-utlösare. | Skapa DML-utlösare | 
| Beskriver hur du skapar en CLR-utlösare. | Skapa CLR-utlösare | 
| Beskriver hur du skapar en DML-utlösare för att hantera dataändringar med både en rad och flera rader. | Skapa DML-utlösare för att hantera flera rader med data | 
| Beskriver hur du kapslar utlösare. | Skapa kapslade utlösare | 
Beskriver hur du anger i vilken AFTER ordning utlösare utlöses. | 
Ange första och sista utlösare | 
| Beskriver hur du använder de särskilda infogade och borttagna tabellerna i triggerkoden. | Använd de infogade och borttagna tabellerna | 
| Beskriver hur du ändrar eller byter namn på en DML-utlösare. | Ändra eller byt namn på DML-utlösare | 
| Beskriver hur du visar information om DML-utlösare. | Hämta information om DML-trigger | 
| Beskriver hur du tar bort eller inaktiverar DML-utlösare. | Ta bort eller inaktivera DML-utlösare | 
| Beskriver hur du hanterar utlösarsäkerhet. | Hantera utlösarsäkerhet |