TSQL Après Déclencheur de mise à Jour vérifier les mises à jour sur plusieurs colonnes dans une SI la mise à JOUR
La syntaxe de base pour un Après déclencheur de mise à Jour en TSQL est:
CREATE TRIGGER [dbo].[triggerName]
ON [dbo].[Table]
AFTER UPDATE, INSERT --trigger when Update or Insert in table
AS BEGIN
SET NOCOUNT ON;
IF UPDATE (ColumnA) -- if ColumnA updates start
begin
UPDATE Table
SET ColumnC = ColumnA + ColumnB -- recalculate Column C
end
IF UPDATE (ColumnB) -- if ColumnB updates start
begin
UPDATE Table
SET ColumnC = ColumnA + ColumnB -- recalculate Column C
end
END
Maintenant ci-dessus pourraient travailler, je suppose, mais est-il possible de combiner les deux SI des MISES à jour?:
Quelque chose comme ceci:
IF UPDATE (ColumnA) OR (ColumnB) -- if ColumnA or ColumnB updates start
begin
UPDATE Table
SET ColumnC = ColumnA + ColumnB -- recalculate Column C
end
Vous pouvez utiliser une colonne calculée, bien sûr, mais par curiosité, j'aimerais savoir si vous pouvez vérifier les mises à jour sur plusieurs colonnes à la fois dans un déclencheur, puis faire l'après déclencheur de mise à jour de la modification.
Aussi, dès maintenant, vous être re-calcul de la
ColumnC
pour tous les lignes de votre tableau, et pas seulement les lignes affectées par une insertion ou une mise à jour de l'opération.....OriginalL'auteur J3FFK | 2014-08-01
Vous devez vous connecter pour publier un commentaire.
C'est un peu long pour un commentaire.
UPDATE()
est un fonction utilisé dans un déclencheur. Il n'est pas spécifique de la syntaxe commeif UPDATE()
. Autant que je sache, les déclencheurs vous permettent de combiner plusieurs conditions dans uneif
déclaration.Mais, encore plus au point, lire l' la documentation sur
UPDATE()
. L'exemple utilisé dans la documentation est:Donc utiliser la syntaxe correcte pour le vôtre et vous serez amende:
Cependant, je vous suggère d'utiliser une colonne calculée à la place.
OriginalL'auteur Gordon Linoff
Vous pouvez utiliser
COLUMNS_UPDATED
:Et il suffit de cocher pour tous les bits que vous êtes intéressé à être définie à l'aide des opérateurs au niveau du bit:
Bien sûr, cela ne dépend alors de l'ordre de la colonne, qui est généralement une mauvaise chose que de dépendre, et aussi de ne pas sauter si l'ordre des colonnes est changée plus tard.
OriginalL'auteur Damien_The_Unbeliever