sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte spouštěč, který při aktualizaci sloupce vloží hodnoty do nové tabulky

Něco takového by mělo dělat to, co potřebujete. Měli byste mít INSERT příkazy níže vkládají hodnoty označující provedenou operaci do 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

Pokud byste chtěli, můžete také přidat sloupce z INSERTED a DELETED do vaší tabulky protokolů, pokud jste chtěli zachytit skutečné hodnoty sloupců, které byly vloženy nebo aktualizovány.



  1. Oprava Msg 529 „Explicitní převod z datového typu int na xml není povolen“ v SQL Server

  2. Převeďte UPDATE na příkaz INSERT INTO ON DUPLICATE KEY UPDATE

  3. mysql Vyberte jeden sloupec dvakrát ze stejné tabulky s různými daty v klauzuli where

  4. jak načíst sadu více výsledků z uložené procedury mysql v laravel