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

Créer un déclencheur qui insère des valeurs dans une nouvelle table lorsqu'une colonne est mise à jour

Quelque chose comme ça devrait faire ce dont vous avez besoin. Vous auriez le INSERT les instructions ci-dessous insèrent des valeurs indiquant l'opération effectuée dans 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 vous le souhaitez, vous pouvez également ajouter des colonnes à partir de INSERTED et DELETED à votre table de journal également si vous souhaitez capturer les valeurs de colonne réelles qui ont été insérées ou mises à jour.