sql >> Base de Datos >  >> RDS >> Sqlserver

activador de actualización para actualizar registros en otra tabla

Necesitaría algo como esto:un basado en conjuntos solución que tiene en cuenta que en un UPDATE declaración, es posible que esté actualizando varias filas a la vez y, por lo tanto, su disparador también debe tratar con varias filas en el Inserted y 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 supone que el TID columna en el User_TB la tabla es la clave principal que permanece igual durante las actualizaciones (para que pueda unir los valores "antiguos" de Deleted pseudo tabla con los valores "nuevos" después de la actualización, almacenados en Inserted pseudo tabla)