Триггер истории таблицы в SQL Server? - PullRequest
5 голосов
/ 17 ноября 2010

Я хотел бы создать триггер, который записывает в таблицу истории с вставленными значениями и до и после обновления значений.Я также хотел бы включить как можно больше информации об учетной записи, выполняющей обновление.Как мне включить информацию об учетной записи в моем триггере?

Вот что у меня есть:

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', '???'
FROM deleted

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

Что я ставлю вместо «???»?

Ответы [ 3 ]

5 голосов
/ 17 ноября 2010

Если у каждого пользователя есть учетная запись, вы можете использовать функцию SYSTEM_USER для определения текущего пользователя. Однако, если все ваши подключения проходят через учетную запись-посредник, как это обычно происходит в большинстве настроек веб-сайта, вы должны полагаться на правильный идентификатор пользователя, передаваемый в инструкцию Update:

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
3 голосов
/ 17 ноября 2010

FWIW, если вы используете SQL Server 2008, существует гораздо лучшая альтернатива, чем написание триггеров для отслеживания изменений данных.Взгляните на Change Data Capture .

0 голосов
/ 17 ноября 2010

используйте ORIGINAL_LOGIN()

вы можете увидеть дальнейшее определение того, что он делает здесь SQL Server - текущее имя пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...