2010-06-27 5 views
0

Tenir compte un déclencheur after update sur la table A. Pour chaque mise à jour sur la gâchette doit mettre à jour tous les enregistrements dans le tableau B. Considérons alors cette requête:déclencheur de mise à jour T-SQL avec plusieurs lignes

UPDATE A SET X = Y 

Apparemment, plusieurs lignes sont mises à jour. Après la mise à jour, le déclenchement a lieu. Maintenant si le déclencheur utilise la table inserted et que vous souhaitez mettre à jour la table B avec chaque ligne de la table temporaire inserted, et dans MSDN n'est pas recommandé d'utiliser des curseurs, comment le feriez-vous?

Merci

+0

Vous devez afficher la structure des deux tables et comment ils se rapportent les uns aux autres afin d'obtenir une réponse précise. – Oded

Répondre

2

Je ne sais pas ce que vous voulez faire exactement dans votre déclencheur de mise à jour, mais vous pouvez par exemple

UPDATE dbo.B 
SET someColumn = i.Anothervalue 
FROM Inserted i 
WHERE b.Criteria = i.Criteria 

ou autre chose - vous devez nous en dire un peu plus sur ce que vous voulez faire avec le tableau B! Mais il est certainement possible de mettre à jour, insérer dans ou autres choses, sans utiliser un curseur et gérer plusieurs lignes de la table Inserted.

+0

C'est exactement ce que je voulais savoir .. Je peux le faire correspondre avec toutes les lignes de la table insérée. –

1

Je suppose que la table A est liée à la table B via une clé (à supposer, comme vous ne l'avez pas posté de détails).

Si tel est le cas, vous pouvez utiliser des sous-requêtes ou se joignent au inserted pour sélectionner les lignes qui doivent changer sur la table B.

UPDATE tableB B 
SET B.colx = someValue 
WHERE B.id IN 
(
    SELECT b_id 
    FROM INSERTED 
) 
+0

oui, ces 2 tables sont PK - FK contraint .. –

Questions connexes