Trigger SQL Server dopo l’aggiornamento per un valore specifico
Di: Dallas Snider | Aggiornato: 2015-09-10 | Comments (6) | Related: More> Trigger
Problema
Ho bisogno di creare un trigger SQL Server che verrà eseguito quando un valore di colonna viene aggiornato a un valore specifico. Come posso farlo?
Soluzione
In questo suggerimento, ti mostriamo come scrivere istruzioni T-SQL che creeranno un trigger SqlServer che verrà eseguito dopo aver aggiornato un valore di colonna a uno specificvalue.
Nell’immagine qui sotto vediamo dove creiamo la nostra tabella di esempio denominata tblTriggerTest con una colonna chiave primaria denominata pkID, una colonna data denominata OrderApprovalDateTime e una colonna varchar denominata OrderStatus. Popoliamo la tabella con tre record di test con OrderApprovalDateTime impostato su NULL e OrderStatus impostato su”In sospeso”.
In questo esempio, vogliamo che il nostro trigger popoli OrderApprovalDateTime con la data corrente fornita dalla funzione getdate() dopo che OrderStatus è stato aggiornato a “Approvato”. Il T-SQL per la creazione di questo trigger è mostrato di seguito. È molto importante includere il JOIN INTERNO alla tabella INSERITA in modo che vengano interessate solo le righe aggiornate. Utilizzando la clausola WHERE OrderStatus= ‘Approved’ da solo per limitare le righe aggiornate, tutte le righe con un valore OrderStatus di Approved verranno aggiornate contemporaneamente.
Per testare il trigger, eseguiremo un’istruzione T-SQL UPDATE per impostare il valore OrderStatus su “Approvato” per la prima riga della tabella (pkID = 1). Dopo il comando T-SQL UPDATE, eseguiamo una query T-SQL SELECT per assicurarsi che il trigger sia eseguito correttamente. L’output delle istruzioni UPDATE e SELECT è mostrato di seguito.
Nota sopra che solo la prima riga aveva il suo OrderApprovalDateTime impostato sulla data corrente, che è il nostro comportamento desiderato. Tuttavia, è necessario eseguire un secondo test per garantire che il numero corretto di righe sia stato aggiornato. Nel nostro secondo test, eseguiremo un’istruzione T-SQL UPDATE per impostare il valore OrderStatus su “Approvato” per la seconda riga della tabella (pkID = 2). Dopo aver selezionato tutti i record nella tabella, notare come OrderApprovalDateTime per la seconda riga non è uguale a OrderApprovalDateTime per la prima riga. Ancora una volta, questo è il nostro comportamento desiderato e tutto appare bene.
Il codice completo per questo suggerimento è nella casella sottostante.
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
Passi successivi
Prenditi qualche minuto per esplorare cosa succede quando cambi il JOIN INTERNO o aggiungi più colonne alla tabella e attiva.
Inoltre, controlla altri suggerimenti su triggers in SQL Server su MSSQLTips.com.
- Costringendo Innescare un Ordine di esecuzione in SQL Server
- Evitare accidentali di aggiornare o cancellare i comandi di tutte le righe in una tabella di SQL Server
- Controllo quando i Trigger sono Disabilitato o Abilitato per SQL Server
Ultimo Aggiornamento: 2015-09-10
Circa l’autore
Visualizza tutti i miei suggerimenti
- Altri suggerimenti per gli sviluppatori di database…
Leave a Reply