Articles

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

Crea la tabella e inserisci i dati di esempio

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.

Crea correttamente il trigger

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.

Verifica con successo il trigger

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.

Testare nuovamente il trigger

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

get script

next pulsante di punta

Circa l’autore
MSSQLTips autore Dallas SniderDr. Dallas Snider è un assistente professore nel Dipartimento di Informatica presso la University of West Florida e ha 18+ anni di esperienza SQL.
Visualizza tutti i miei suggerimenti
Risorse correlate

  • Altri suggerimenti per gli sviluppatori di database…