Articles

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”.

maak de tabel aan en voeg voorbeeldgegevens in

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.

succesvol de trigger aanmaken

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.

test met succes de trigger

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.

Test de trigger opnieuw

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

krijgen scripts

de volgende tip knop

Over de auteur
MSSQLTips auteur Dallas SniderDr. Dallas Snider is universitair docent aan de afdeling Informatica aan de Universiteit van West Florida en heeft meer dan 18 jaar SQL-ervaring.
Bekijk al mijn tips
gerelateerde bronnen

  • meer tips voor Databaseontwikkelaars…