sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en utlösare som infogar värden i en ny tabell när en kolumn uppdateras

Något sådant här borde göra vad du behöver. Du skulle ha INSERT satser nedan infogar värden som indikerar operationen som utförs i 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

Om du vill kan du också lägga till kolumner från INSERTED och DELETED till din loggtabell också om du vill fånga de faktiska kolumnvärdena som infogades eller uppdaterades.



  1. PHP MySQL-uppdateringen lyckades men databasen uppdaterades inte

  2. Hur man konverterar tidszonen i MySQL

  3. Kopiera en enorm MySQL-tabell från en fjärrkontroll till en lokal databas

  4. MariaDB JSON_ARRAY_INSERT() Förklarad