2010-06-06 12 views

Répondre

69

SQL Server déclenche ont accès à 2 tables « magiques » qui contiennent une ligne pour chaque ligne insérée, mise à jour ou supprimé dans la déclaration qui a provoqué le déclenchement d'exécuter.

Pour trouver toutes les lignes insérées sur une instruction INSERT:

select * from inserted 

Pour toutes les lignes supprimées sur une instruction DELETE:

select * from deleted 

Pour les instructions UPDATE, chaque ligne mise à jour sera présent dans les tableaux insérés et supprimés. La table insérée conservera la nouvelle valeur de la ligne après l'instruction update, et la table supprimée conservera l'ancienne valeur de la ligne juste avant l'instruction update. Joignez-vous entre les deux tableaux pour obtenir ce dont vous avez besoin:

select i.*, d.* 
from inserted i 
join deleted d on (i.id = d.id) 
+0

+1 merci pour le point sur les lignes de mise à jour étant présents dans les deux tableaux supprimés et insérés. – mdma

+0

Autant que j'aime cette solution, je tiens à souligner que _if_ la table référencée par le déclencheur n'a pas de clé primaire, l'instruction 'update' ne sera pas utile :( –

+0

Tant qu'il y a un moyen de joindre de manière significative entre les deux tables (comme la clause WHERE de l'instruction UPDATE généralement utilisée), il sera significatif, même si la table n'a pas de clé primaire formelle. –

1

vous voulez que le déclencheur spécial supprimé et tables insérées. De MSDN:

Dans déclencheurs DML, les tableaux insérés et supprimés sont principalement utilisés pour effectuer les opérations suivantes: Prolonger l'intégrité référentielle entre les tables. Insérer ou mettre à jour des données dans les tables de base sous-jacentes à une vue. Tester les erreurs et passer à l'action en fonction de l'erreur. Recherchez la différence entre l'état d'une table avant et après une modification de données et effectuez des actions en fonction de cette différence. La table supprimée stocke les copies des lignes affectées lors des instructions DELETE et UPDATE. Lors de l'exécution d'une instruction DELETE ou UPDATE, les lignes sont supprimées de la table de trigger et transférées dans la table supprimée. La table supprimée et la table de déclenchement n'ont généralement pas de lignes en commun. La table insérée stocke les copies des lignes affectées au cours des instructions INSERT et UPDATE. Lors d'une transaction d'insertion ou de mise à jour, de nouvelles lignes sont ajoutées à la table insérée et à la table de déclenchement. Les lignes de la table insérée sont des copies des nouvelles lignes de la table de déclenchement.

check here for more info

+0

Ce lien est mort. Pouvez-vous le mettre à jour? –

+1

@FedericoTraiman, le lien semble fonctionner pour moi, figuré un lien msdn ne serait probablement pas mort. J'ai ajouté une partie du contenu au corps de la réponse. –

+0

C'est vivant maintenant! Merci –

Questions connexes