2010-07-05 7 views
1

J'essaye de créer le déclencheur sur SQL Server 2008. Je veux que si je met à jour le champ dans le journal de tabele que la nouvelle valeur met à jour le champ dans une autre table Doc. Ceci est le code de déclenchement:Mettre à jour le déclencheur insérer Null

Create TRIGGER dbo.DocSt 
    ON dbo.log 
    AFTER UPDATE 
IF (SELECT COUNT(*) FROM inserted) > 0 
    BEGIN 
     IF (SELECT COUNT(*) FROM deleted) > 0 
     BEGIN 
      UPDATE [dbo].[Doc] 
    SET 
     [ID_user] = (select ID_user from inserted) 
WHERE 
IDN= (select id_doc from inserted) 
     END 
     END 

Lorsque je mets à jour le champ dans la table de mise à jour du journal de table triger le document mais insère NULL. Qu'est-ce que je fais mal? Merci!

Répondre

1

Ce code ne fonctionnera jamais - ce qui se passe dans votre instruction UPDATE met à jour 10 lignes ?? Qu'est-ce que cela vous donner sélection:

SET [ID_user] = (select ID_user from inserted) 

Vous essayez de définir une valeur unique à un retour ensemble d'une déclaration SELECT - qui ne fonctionne pas, évidemment.

Vous devez créer une instruction UPDATE qui se joint à la pseudo table Inserted:

CREATE TRIGGER dbo.DocSt 
    ON dbo.log AFTER UPDATE 

    UPDATE [dbo].[Doc] 
    FROM Inserted i 
    SET [ID_user] = i.ID_User 
    WHERE IDN = i.id_doc 

De cette façon, pour chaque entrée Inserted, vous vous joignez à votre table dbo.Doc à et mettre à jour la colonne ID_user .

Questions connexes