Articles

SQL Server Trigger Etter Oppdatering for En Bestemt Verdi

By: Dallas Snider | Updated: 2015-09-10 | Comments (6) | Related: More > Triggers

Problem

jeg må opprette EN SQL Server trigger som skal utføres når en kolonneverdi oppdateres til en bestemt verdi. Hvordan kan jeg gjøre dette?

Løsning

i dette tipset viser Vi deg hvordan du skriver T-SQL-setninger som vil opprette En sqlserver-utløser som vil utføre etter at vi oppdaterer en kolonneverdi til en spesifikk verdi.

i bildet nedenfor ser vi hvor vi lager vårt eksempeltabell kalt tblTriggerTest med en primærnøkkelkolonne kalt pkID, en datokolonne kalt OrderApprovalDateTime og en varchar-kolonne kalt OrderStatus. Vi fyller tabellen med tre testposter med OrderApprovalDateTime satt TIL NULL og OrderStatus satt til «Venter».

Opprett tabellen og sett inn eksempeldata

I dette eksemplet vil vi at utløseren skal fylle OrderApprovalDateTime med gjeldende dato gitt av getdate () – funksjonen etter At OrderStatus er oppdatert til «Godkjent». T-SQL for å opprette denne utløseren er vist nedenfor. DET er svært viktig å inkludere DEN INDRE SAMMENFØYNINGEN til DET INNSATTE bordet slik at bare de oppdaterte radene påvirkes. Ved å bruke klausulen WHERE OrderStatus=’Approved’ av seg selv for å begrense radene som oppdateres, vil faktisk alle rader med En OrderStatus-verdi For Godkjent oppdateres samtidig.

Opprett utløseren

for å teste utløseren vil vi utføre EN T-SQL UPDATE-setning for å sette OrderStatus-verdien Til «Godkjent» for den første raden i tabellen (pkID = 1). Etter KOMMANDOEN T-SQL UPDATE utfører vi deretter EN T-SQL SELECT-spørring for å sikre at utløseren utføres riktig. Utdataene FRA OPPDATERINGEN OG SELECT-setningene vises nedenfor.

Vellykket test utløseren

Legg merke til at bare den første raden hadde Sin Ordreapprovaldatetime satt til gjeldende dato,som er vår ønsket oppførsel. Vi må imidlertid kjøre en ny test for å sikre at riktig antall rader er oppdatert. I vår andre test vil vi utføre EN T-SQL UPDATE-setning for å sette OrderStatus-verdien til «Godkjent» for den Andre raden i tabellen (pkID = 2). Etter å ha valgt alle poster i tabellen, legg merke til Hvordan Ordreapprovaldatetime for den andre raden ikke er Lik Ordreapprovaldatetime for den første raden. Igjen, dette er vår ønskede oppførsel og alt ser bra ut.

Test utløseren igjen

den komplette koden for dette tipset er i boksen nedenfor.

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
Neste Trinn

ta noen minutter å utforske hva som skjer når du endrer DEN INDRE SAMMENFØYNINGEN eller legger til flere kolonner i tabellen og utløser.

sjekk også ut flere tips påutløsere I SQL Server på MSSQLTips.com.

  • Tvinge Utløser Avfyring Rekkefølge I SQL Server
  • Forhindre utilsiktet oppdatering eller slette kommandoer av alle rader i EN SQL Server-tabell
  • Overvåking Når Utløsere Er Deaktivert eller Aktivert FOR SQL Server

sist Oppdatert: 2015-09-10

få skript

neste tips knapp
Om Forfatteren
mssqltips forfatter dallas snider dr. Dallas Snider Er Assisterende Professor I Datavitenskapsavdelingen Ved University Of West Florida og har 18 + års SQL-erfaring.
Vis alle mine tips
Relaterte Ressurser

  • Flere Database Utvikler Tips…