Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
De DML-trigger is een speciaal type opgeslagen procedure dat automatisch van kracht wordt wanneer een DML-gebeurtenis (Data Manipulat Language) plaatsvindt die van invloed is op de tabel of weergave die in de trigger is gedefinieerd. DML-gebeurtenissen bevatten INSERT, UPDATEof DELETE instructies. DML-triggers kunnen worden gebruikt om bedrijfsregels en gegevensintegriteit af te dwingen, andere tabellen op te vragen en complexe Transact-SQL instructies op te nemen. De trigger en de instructie die deze activeert, worden behandeld als één transactie, die vanuit de trigger kan worden teruggedraaid. Als er een ernstige fout wordt gedetecteerd (bijvoorbeeld onvoldoende schijfruimte), wordt de hele transactie automatisch teruggedraaid.
Voordelen
DML-triggers zijn vergelijkbaar met beperkingen omdat ze entiteitsintegriteit of domeinintegriteit kunnen afdwingen. In het algemeen moet entiteitsintegriteit altijd worden afgedwongen op het laagste niveau door indexen die deel uitmaken van PRIMARY KEY en UNIQUE beperkingen of onafhankelijk van beperkingen worden gemaakt. Domeinintegriteit moet worden afgedwongen via CHECK beperkingen en referentiële integriteit (RI) moet worden afgedwongen via FOREIGN KEY beperkingen. DML-triggers zijn het handigst wanneer de functies die worden ondersteund door beperkingen, niet aan de functionele behoeften van de toepassing kunnen voldoen.
De volgende lijst vergelijkt DML-triggers met beperkingen en identificeert wanneer DML-triggers voordelen hebben ten opzichte van beperkingen.
DML-triggers kunnen wijzigingen trapsgewijs doorvoeren via gerelateerde tabellen in de database; Deze wijzigingen kunnen echter efficiënter worden uitgevoerd met trapsgewijze referentiële integriteitsbeperkingen.
FOREIGN KEYbeperkingen kunnen een kolomwaarde alleen valideren met een exacte overeenkomst met een waarde in een andere kolom, tenzij deREFERENCEScomponent een trapsgewijze referentiële actie definieert.Ze kunnen beschermen tegen kwaadwillende of onjuiste
INSERT,UPDATEenDELETEbewerkingen en andere beperkingen afdwingen die complexer zijn dan beperkingen die zijn gedefinieerd metCHECKbeperkingen.In tegenstelling tot
CHECKbeperkingen kunnen DML-triggers verwijzen naar kolommen in andere tabellen. Een trigger kan bijvoorbeeld een element uit een andere tabel gebruiken om te vergelijken met de ingevoegde of bijgewerkte gegevens, en om andere acties uit te voeren, zoals het wijzigen van de gegevens of het weergeven van een foutmelding die door de gebruiker is gedefinieerd.Ze kunnen de status van een tabel vóór en na het wijzigen van gegevens evalueren en acties uitvoeren op basis van dat verschil.
Meerdere DML-triggers van hetzelfde type (
INSERT,UPDATEofDELETE) in een tabel maken meerdere, verschillende acties mogelijk als reactie op dezelfde wijzigingsinstructie.Beperkingen kunnen alleen communiceren over fouten via gestandaardiseerde systeemfoutberichten. Als uw toepassing aangepaste berichten en complexere foutafhandeling vereist of baat kan hebben bij, dient u een trigger te gebruiken.
DML-triggers kunnen wijzigingen die referentiële integriteit schenden, niet toestaan of terugdraaien, waardoor de poging tot wijziging van gegevens wordt geannuleerd. Een dergelijke trigger wordt mogelijk van kracht wanneer u een vreemde sleutel wijzigt en de nieuwe waarde niet overeenkomt met de primaire sleutel.
FOREIGN KEYVoor dit doel worden echter meestal beperkingen gebruikt.Als er beperkingen bestaan in de triggertabel, worden deze gecontroleerd na de uitvoering van de
INSTEAD OFtrigger, maar vóór deAFTERtriggeruitvoering. Als de beperkingen worden geschonden, worden deINSTEAD OFtriggeracties teruggedraaid en wordt deAFTERtrigger niet uitgevoerd.
Typen DML-trigger
Achter trigger
AFTERtriggers worden uitgevoerd nadat de actie van de INSERTUPDATE, of MERGEDELETE instructie is uitgevoerd.
AFTER triggers worden nooit uitgevoerd als er een schending van een beperking optreedt. Deze triggers kunnen daarom niet worden gebruikt voor verwerkingen die schendingen van beperkingen kunnen voorkomen. Voor elke INSERT, UPDATEof DELETE actie die is opgegeven in een MERGE instructie, wordt de bijbehorende trigger geactiveerd voor elke DML-bewerking.
IN PLAATS VAN trigger
INSTEAD OF triggers overschrijven de standaardacties van de triggerende instructie. Daarom kunnen ze worden gebruikt om fout- of waardecontrole uit te voeren op een of meer kolommen en andere acties uit te voeren voordat u de rij of rijen invoegt, bijwerkt of verwijdert. Wanneer bijvoorbeeld de waarde die wordt bijgewerkt in een kolom met een uurloon in een salaristabel een opgegeven waarde overschrijdt, kan een trigger worden gedefinieerd om een foutbericht te genereren en de transactie terug te draaien, of een nieuwe record in te voegen in een audittrail voordat u de record in de salaristabel invoegt. Het belangrijkste voordeel van INSTEAD OF triggers is dat ze weergaven inschakelen die niet kunnen worden bijgewerkt om updates te ondersteunen. Een weergave op basis van meerdere basistabellen moet bijvoorbeeld een INSTEAD OF trigger gebruiken ter ondersteuning van invoegingen, updates en verwijderingen die verwijzen naar gegevens in meer dan één tabel. Een ander voordeel van INSTEAD OF triggers is dat u codelogica kunt gebruiken waarmee onderdelen van een batch kunnen worden geweigerd, terwijl andere onderdelen van een batch kunnen slagen.
Deze tabel vergelijkt de functionaliteit van de AFTER en INSTEAD OF triggers.
| Functie |
AFTER trigger |
INSTEAD OF trigger |
|---|---|---|
| Toepasselijkheid | Tabellen | Tabellen en weergaven |
| Hoeveelheid per tabel of weergave | Meerdere acties per triggeractie (UPDATE, DELETEen INSERT) |
Eén per triggeractie (UPDATE, DELETEen INSERT) |
| Trapsgewijze verwijzingen | Er zijn geen beperkingen van toepassing |
INSTEAD OF UPDATE en DELETE triggers zijn niet toegestaan voor tabellen die doelen zijn van trapsgewijze beperkingen voor referentiële integriteit. |
| Uitvoering | Na: Beperkingsverwerking Declaratieve referentiële acties inserted en deleted tabellen makenDe triggeractie |
Voor: Beperkingsverwerking In plaats van: De triggeractie Na: inserted en deleted tabellen maken |
| Uitvoeringsvolgorde | De eerste en laatste uitvoering kunnen worden opgegeven | Niet van toepassing |
varchar(max), nvarchar(max), en varbinary(max) kolomverwijzingen in inserted en deleted tabellen |
Toegestaan | Toegestaan |
text-, ntext- en image-kolomverwijzingen in inserted en deleted tabellen |
Niet toegestaan | Toegestaan |
CLR-trigger
Een CLR-trigger (Common Language Runtime) kan een AFTER-trigger of een INSTEAD OF-trigger zijn. Een CLR-trigger kan ook een DDL-trigger (Data Definition Language) zijn. In plaats van een Transact-SQL opgeslagen procedure uit te voeren, voert een CLR-trigger een of meer methoden uit die zijn geschreven in beheerde code die lid zijn van een assembly die is gemaakt in .NET Framework en geüpload in SQL Server.
Gerelateerde taken
| Opdracht | Artikel |
|---|---|
| Hierin wordt beschreven hoe u een DML-trigger maakt. | DML-triggers maken |
| Beschrijft hoe u een CLR-trigger maakt. | CLR-triggers maken |
| Hierin wordt beschreven hoe u een DML-trigger maakt voor het afhandelen van gegevenswijzigingen met één rij en meerdere rijen. | DML-triggers maken voor het afhandelen van meerdere rijen met gegevens |
| Hierin wordt beschreven hoe u triggers kunt nesten. | Geneste triggers maken |
Beschrijft hoe u de volgorde opgeeft waarin AFTER triggers worden geactiveerd. |
Eerste en laatste triggers opgeven |
| Hierin wordt beschreven hoe u de speciale ingevoegde en verwijdertabellen in triggercode gebruikt. | De ingevoegde en verwijderde tabellen gebruiken |
| Hierin wordt beschreven hoe u een DML-trigger wijzigt of hernoemt. | DML-triggers wijzigen of de naam ervan wijzigen |
| Hierin wordt beschreven hoe u informatie over DML-triggers kunt weergeven. | Informatie over DML-triggers ophalen |
| Hierin wordt beschreven hoe u DML-triggers verwijdert of uitschakelt. | DML-triggers verwijderen of uitschakelen |
| Beschrijft hoe u triggerbeveiliging beheert. | Triggerbeveiliging beheren |