2010-12-09 5 views
2

Si j'écris ceci:Ma requête de mise à jour ne déclenche pas AFTER UPDATE Trigger

update School set Name = Name where Id = 733021 

Mon déclencheur déclaré comme ce travail:

[dbo].[SchoolUpdateSomething] ON 
[dbo].[School] AFTER INSERT, UPDATE 
AS 
DECLARE @N int, @SchoolType nvarchar(255) 

Mais si je

update School set Name = Name 

Il ne déclenchera pas le déclencheur pour toutes les lignes. Pourquoi?

, je vis le même problème en mettant à jour vraiment les lignes, pour exemple en mettant à jour les noms avec des noms d'école d'une autre table:

UPDATE School 
    SET Name = usl.Name 
FROM School s INNER JOIN UpdatedSchoolList usl 
    ON s.Id = usl.Id COLLATE DATABASE_DEFAULT 

Carl

+1

Pouvez-vous poster le code de votre déclencheur? –

Répondre

1

http://bytes.com/topic/sql-server/answers/80432-statement-level-vs-row-level-triggers

Vous devez prendre vous l'action sur les lignes de la pseudo-table INSERTED.

+0

Je pense que je comprends le problème, mais pas votre solution. Pourriez-vous détailler? – Malartre

+0

Dans votre déclencheur, vous pouvez accéder à une table virtuelle dont le nom est "INSÉRÉ" et exécuter DML sur les lignes qu'il contient. – Tim

+0

Super, une autre chose à découvrir! Pour cette situation précise, j'ai utilisé un curseur en boucle pour faire ce travail. – Malartre

Questions connexes