Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

déclencheur de mise à jour pour mettre à jour les enregistrements dans une autre table

Vous auriez besoin de quelque chose comme ça - un basé sur un ensemble solution qui prend en compte cela dans une UPDATE déclaration, vous mettez peut-être à jour plusieurs lignes à la fois, et donc votre déclencheur doit également traiter plusieurs lignes dans le Inserted et Deleted tableaux.

CREATE TRIGGER [dbo].[updateUserId] 
ON [dbo].[User_TB]
FOR UPDATE
AS 
    -- update the "Break" table - find the rows based on the *old* User_Id
    -- from the "Deleted" pseudo table, and set it to the *new* User_Id
    -- from the "Inserted" pseudo table
    SET User_Id = i.User_Id 
    FROM Inserted i
    INNER JOIN Deleted d ON i.TID = d.TID
    WHERE
        Break_TB.User_Id = d.User_Id

    -- update the "Log" table - find the rows based on the *old* User_Id
    -- from the "Deleted" pseudo table, and set it to the *new* User_Id
    -- from the "Inserted" pseudo table
    UPDATE Break_TB 
    SET User_Id = i.User_Id 
    FROM Inserted i
    INNER JOIN Deleted d ON i.TID = d.TID
    WHERE
        Break_TB.User_Id = d.User_Id

Ce code suppose que le TID colonne dans le User_TB table est la clé primaire qui reste le même lors des mises à jour (afin que je puisse réunir les "anciennes" valeurs du Deleted pseudo table avec les "nouvelles" valeurs après la mise à jour, stockées dans le Inserted pseudo-table)