J'ai écrit un déclencheur qui doit faire des travaux différents sur une table sur la base de laquelle les colonnes d'affilées sont réellement mises à jour. J'ai accompli cela en utilisant cette partie fonctionne bien. Il s'avère cependant qu'il existe d'autres parties du code qui mettent à jour les lignes en définissant chaque valeur si la valeur a été modifiée ou non, ce qui provoque l'incendie de la gâchette pour les pièces "mises à jour" mais dont les valeurs n'ont pas changé. du tout. P> Modification du code qui cause ce problème n'est probablement pas une option, est-il un moyen plus facile d'éviter cela que d'avoir à comparer entre les tableaux insérés et supprimés (auquel cas les mises à jour si elles ne signifient pas de sens)? p> p>
4 Réponses :
Pas que je sache. inséré code> et
supprimé code> existe une raison et la comparaison entre eux semble la meilleure option pour moi. P>
si la mise à jour () code> vous dit simplement si un insert ou la mise à jour
La colonne a été mise à jour. Que l'ancienne valeur et la nouvelle valeur étaient les mêmes, c'est juste un détail. Je pense que votre seule solution est de comparer les valeurs entre les pseudo-tables insérés et supprimés. P>
Comme d'autres personnes ont dit, vous devez utiliser le Voici ce que j'ai fait, au lieu de: P> < Pré> xxx pré> J'ai fait: p> utilisant inséré (code> et
supprimé code> tables.
sauf code> sélectionne les lignes distinctes où les colonnes que je suis intéressée ne sont pas existent dans la table supprimée (ou des données originales) (ce qui signifie que la valeur de ces colonnes a changé). Je ne sais pas si c'est la meilleure réponse, mais cela semble fonctionner. P> p>
SELECT CASE WHEN I.Col1 <> D.Col1 THEN 1 ELSE 0 END AS Col1Diff, CASE WHEN I.Col2 <> D.Col2 THEN 1 ELSE 0 END AS Col2Diff, ... FROM INSERTED I JOIN DELETED D ON I.Key = D.Key