SQL Server Trigger na Update voor een specifieke waarde
By: Dallas Snider / Updated: 2015-09-10 | Comments (6)/Related: More > Triggers
probleem
Ik moet een SQL Server trigger maken die wordt uitgevoerd wanneer een kolomwaarde wordt bijgewerkt naar een specifieke waarde. Hoe kan ik dit doen?
oplossing
in deze tip laten we u zien hoe u T-SQL-statements schrijft die een SQLServer-trigger aanmaken die wordt uitgevoerd nadat we een kolomwaarde hebben bijgewerkt naar een specifieke waarde.
in de afbeelding hieronder zien we waar we onze voorbeeldtabel met de naam tblTriggerTest maken met een primaire sleutelkolom met de naam pkID, een datumkolom met de naam OrderApprovalDateTime en een varchar-kolom met de naam OrderStatus. We vullen de tabel met drie testrecords met de OrderApprovalDateTime ingesteld op NULL en de OrderStatus ingesteld op “Pending”.
In dit voorbeeld willen we dat onze trigger de Ordergoedkeuringdatetime vult met de huidige datum die door de getdate() functie wordt opgegeven nadat de OrderStatus is bijgewerkt naar”goedgekeurd”. De T-SQL voor het maken van deze trigger wordt hieronder getoond. Het is erg belangrijk om de innerlijke verbinding met de ingevoegde tabel op te nemen, zodat alleen de bijgewerkte rijen worden beïnvloed. Het gebruik van de clausule waarin OrderStatus = ‘goedgekeurd’ op zichzelf om de bijgewerkte rijen te beperken, zal er feitelijk toe leiden dat alle rijen met een OrderStatus waarde van goedgekeurd tegelijkertijd worden bijgewerkt.
om de trigger te testen, zullen we een T-SQL UPDATE statement uitvoeren om de OrderStatus waarde in te stellen op” goedgekeurd ” voor de eerste rij in de tabel (pkID = 1). Na het T-SQL UPDATE commando, voeren we vervolgens een T-SQL SELECT query uit om er zeker van te zijn dat de trigger correct is uitgevoerd. De uitvoer van de update en SELECT statements worden hieronder weergegeven.
merk hierboven op dat alleen de eerste rij zijn Ordergoedkeuringdatetijd had ingesteld op de huidige datum, wat ons gewenste gedrag is. We moeten echter een tweede test uitvoeren om ervoor te zorgen dat het juiste aantal rijen is bijgewerkt. In onze tweede test zullen we een T-SQL UPDATE statement uitvoeren om de OrderStatus waarde in te stellen op “goedgekeurd” voor de tweede rij in de tabel (pkID = 2). Na het selecteren van alle records in de tabel, merk op hoe de OrderApprovalDateTime voor de tweede rij niet gelijk is aan de OrderApprovalDateTime voor de eerste rij. Nogmaals, dit is ons gewenste gedrag en alles lijkt goed.
de volledige code voor deze tip staat in het onderstaande kader.
use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
de volgende stappen
duren een paar minuten om te onderzoeken wat er gebeurt als u de interne JOIN wijzigt of meer kolommen toevoegt aan de tabel en trigger.
bekijk ook meer tips ontriggers in SQL Server op MSSQLTips.com.
- Dwingen Trigger ontstekingsvolgorde in SQL Server
- het Voorkomen van per ongeluk update-of delete-commando ‘ s van alle rijen in een SQL Server-tabel
- Controle als Triggers worden in-of Uitgeschakeld voor SQL Server
Laatst Bijgewerkt: 2015-09-10
Over de auteur
Bekijk al mijn tips
- meer tips voor Databaseontwikkelaars…
Leave a Reply