Articles

Déclencheur SQL Server Après la mise à jour pour une Valeur spécifique

Par: Dallas Snider | Mise à jour: 2015-09-10 |Commentaires (6) | Connexe: Plus > Déclencheurs

Problème

J’ai besoin de créer un déclencheur SQL Server qui s’exécutera lorsqu’une valeur de colonne est mise à jour à une valeur spécifique. Comment puis-je faire ça?

Solution

Dans cette astuce, nous vous montrons comment écrire des instructions T-SQL qui créeront un déclencheur SQLServer qui s’exécutera après la mise à jour d’une valeur de colonne vers une valeur spécifique.

Dans l’image ci-dessous, nous voyons où nous créons notre exemple de table nommée tblTriggerTest avec une colonne de clé primaire nommée pkID, une colonne de date nommée OrderApprovalDateTime et une colonne varchar nommée OrderStatus. Nous remplissons la table avec trois enregistrements de test avec le OrderApprovalDateTime défini sur NULL et le OrderStatus défini sur « En attente ».

Créez la table et insérez des données d'exemple

Dans cet exemple, nous voulons que notre déclencheur remplisse la OrderApprovalDateTime avec la date actuelle fournie par la fonction getdate() après la mise à jour de OrderStatus en « Approuvé ». Le T-SQL pour créer ce déclencheur est illustré ci-dessous. Il est très important d’inclure la JOINTURE INTERNE à la table INSÉRÉE afin que seules les lignes mises à jour soient affectées. L’utilisation de la clause OÙ OrderStatus=’Approved’ par elle-même pour limiter les lignes mises à jour entraînera en fait la mise à jour simultanée de toutes les lignes avec une valeur OrderStatus de Approved.

Créez avec succès le déclencheur

Pour tester le déclencheur, nous exécuterons une instruction de MISE À JOUR T-SQL pour définir la valeur OrderStatus sur « Approuvé » pour la première ligne de la table (pkID=1). Après la commande de MISE À JOUR T-SQL, nous exécutons ensuite une requête de sélection T-SQL pour nous assurer que le déclencheur s’exécute correctement. La sortie des instructions UPDATE et SELECT est affichée ci-dessous.

Testez avec succès le déclencheur

Notez ci-dessus que seule la première ligne avait son OrderApprovalDateTime défini à la date actuelle, ce qui est notre comportement souhaité. Cependant, nous devons exécuter un deuxième test pour nous assurer que le nombre correct de lignes a été mis à jour. Dans notre deuxième test, nous exécuterons une instruction de MISE À JOUR T-SQL pour définir la valeur OrderStatus sur « Approuvé » pour la deuxième ligne de la table (pkID = 2). Après avoir sélectionné tous les enregistrements dans le tableau, remarquez comment OrderApprovalDateTime pour la deuxième ligne n’est pas égal à OrderApprovalDateTime pour la première ligne. Encore une fois, c’est notre comportement souhaité et tout semble bien.

Testez à nouveau le déclencheur

Le code complet de cette astuce se trouve dans la case ci-dessous.

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

Étapes suivantes

Prenez quelques minutes pour explorer ce qui se passe lorsque vous modifiez la JOINTURE INTERNE ou ajoutez plus de colonnes à la table et déclenchez.

En outre, consultez plus de conseils surriggers dans SQL Server sur MSSQLTips.com .

  • Forcer l’ordre de déclenchement des déclencheurs dans SQL Server
  • Empêcher la mise à jour accidentelle ou la suppression de commandes de toutes les lignes d’une table SQL Server
  • Audit lorsque les déclencheurs sont désactivés ou activés pour SQL Server

Dernière mise à jour : 2015-09-10

obtenir des scripts

bouton de pointe suivant

À propos de l’auteur
MSSQLTips auteur Dallas SniderDr. Dallas Snider est professeur adjoint au Département d’informatique de l’Université de Floride occidentale et possède plus de 18 ans d’expérience SQL.
Voir tous mes conseils
Ressources connexes

  • Plus de conseils pour les développeurs de bases de données…