Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Tabellenverlaufsauslöser in SQL Server?

Wenn jeder Benutzer ein Konto hat, können Sie den SYSTEM_USER verwenden Funktion zur Ermittlung des aktuellen Benutzers. Wenn jedoch alle Ihre Verbindungen über ein Proxy-Konto laufen, wie es bei den meisten Website-Setups üblich ist, müssen Sie sich darauf verlassen, dass die richtige userId an die Update-Anweisung übergeben wird:

CREATE TRIGGER [update_history] ON MyTable
FOR UPDATE
AS
INSERT MyTable_History (id, BudgetNumber, PositionNumber, ModifiedDate, action, userId)
SELECT id, BudgetNumber, PositionNumber, GETDATE(), 'BEFORE UPDATE', inserted.userId
FROM MyTable
    Join inserted
        On inserted.id = MyTable.id

INSERT MyTable_History (id, BudgetNumber, PositionNumber, ModifiedDate, action, userId)
SELECT id, BudgetNumber, PositionNumber, GETDATE(), 'AFTER UPDATE', userId
FROM inserted