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

Cree un disparador que inserte valores en una nueva tabla cuando se actualice una columna

Algo como esto debería hacer lo que necesitas. Tendrías el INSERT las siguientes declaraciones insertan valores que indican la operación realizada en MyLogTable .

CREATE TRIGGER [dbo].[TRIG_MyTable]
ON [dbo].[MyTable]
AFTER INSERT, UPDATE

AS 

DECLARE @INS int, @DEL int

SELECT @INS = COUNT(*) FROM INSERTED
SELECT @DEL = COUNT(*) FROM DELETED

IF @INS > 0 AND @DEL > 0 
BEGIN

    -- a record got updated, so log accordingly.

    INSERT INTO MyLogTable
    SELECT 'New Values', getdate() FROM INSERTED

    INSERT INTO MyLogTable
    SELECT 'Old Values', getdate() FROM DELETED

END

ELSE 
BEGIN

    -- a new record was inserted.

    INSERT INTO MyLogTable
    SELECT 'Insert', getdate() FROM INSERTED

END

Si quisiera, también podría agregar columnas desde INSERTED y DELETED a su tabla de registro también si desea capturar los valores de columna reales que se insertaron o actualizaron.