Articles

SQL Server Trigger după actualizare pentru o anumită valoare

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

problemă

am nevoie pentru a crea un trigger SQL Server care va executa atunci când o valoare coloană este actualizat la o anumită valoare. Cum pot face asta?

soluție

în acest sfat, vă arătăm cum să scrieți instrucțiuni T-SQL care vor crea un declanșator SQLServer care se va executa după ce actualizăm o valoare a coloanei la o valoare specifică.

în imaginea de mai jos vedem unde creăm tabelul nostru de exemplu numit Tbltriggertest cu o coloană cheie primară numită pkID, o coloană de dată numită OrderApprovalDateTime și o coloană varchar numită OrderStatus. Populăm tabelul cu trei înregistrări de testare cu OrderApprovalDateTime setat la NULL și OrderStatus setat la”în așteptare”.

creați tabelul și introduceți datele exemplului

În acest exemplu, dorim ca declanșatorul nostru să populeze OrderApprovalDateTime cu data curentă furnizată de funcția getdate() după ce OrderStatus este actualizat la „aprobat”. T-SQL pentru crearea acestui declanșator este prezentat mai jos. Este foarte important să includeți îmbinarea interioară la tabelul inserat, astfel încât să fie afectate numai rândurile actualizate. Utilizarea clauzei unde OrderStatus = ‘Approved’ de la sine pentru a limita rândurile actualizate va duce de fapt la toate rândurile cu o valoare OrderStatus de Approved fiind actualizate în același timp.

creați cu succes declanșatorul

pentru a testa declanșatorul, vom executa o instrucțiune de actualizare T-SQL pentru a seta valoarea OrderStatus la „aprobat” pentru primul rând din tabel (pkID = 1). După comanda de actualizare T-SQL, executăm apoi o interogare de selectare T-SQL pentru a ne asigura că declanșatorul a fost executat corect. Ieșirea din instrucțiunile actualizare și selectare este prezentată mai jos.

testați cu succes declanșatorul

observați mai sus că numai primul rând a avut OrderApprovalDateTime setat la data curentă, care este comportamentul nostru dorit. Cu toate acestea, avem nevoie pentru a rula un al doilea test pentru a se asigura că numărul corect de rânduri au fost actualizate. În al doilea test, vom executa o instrucțiune de actualizare T-SQL pentru a seta valoarea OrderStatus la „aprobat” pentru al doilea rând din tabel (pkID = 2). După selectarea tuturor înregistrărilor din tabel, observați cum OrderApprovalDateTime pentru al doilea rând nu este egal cu OrderApprovalDateTime pentru primul rând. Din nou, acesta este comportamentul nostru dorit și totul pare bine.

testați din nou declanșatorul

codul complet pentru acest sfat este în caseta de mai jos.

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
pașii următori

luați câteva minute pentru a explora ce se întâmplă atunci când schimbați asocierea interioară sau adăugați mai multe coloane în tabel și declanșați.

de asemenea, a verifica afară mai multe sfaturi ontriggers în SQL Server pe MSSQLTips.com.

  • forțarea de declanșare pentru ardere în SQL Server
  • preveni actualizarea accidentală sau șterge comenzi de toate rândurile într-un tabel SQL Server
  • audit atunci când declanșatoare sunt dezactivate sau activate pentru SQL Server

Ultima actualizare: 2015-09-10

get scripts

butonul următor sfat

despre autor
mssqltips autor Dallas Snider Dr. Dallas Snider este profesor asistent în departamentul de Informatică de la Universitatea din Florida de Vest și are peste 18 ani de experiență SQL.
Vezi toate sfaturile mele
Resurse conexe

  • Mai multe sfaturi pentru dezvoltatori de baze de date…