Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

gatilho de atualização para atualizar registros em outra tabela


Você precisaria de algo assim - um baseado em conjunto solução que leva em conta que em um UPDATE declaração, você pode estar atualizando várias linhas de uma só vez e, portanto, seu gatilho também deve lidar com várias linhas no Inserted e Deleted mesas.
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

Este código supõe que o TID coluna no User_TB table é a chave primária que permanece o mesmo durante as atualizações (para que eu possa juntar os valores "antigos" do Deleted pseudo tabela com os "novos" valores após a atualização, armazenados no Inserted pseudotabela)