Abe*_*ler 5 sql-server triggers
我想创建一个触发器,它使用插入的值以及更新值之前和之后写入历史表.我还想尽可能多地包含有关更新帐户的信息.我如何在触发器中包含帐户信息?
这是我到目前为止:
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
Run Code Online (Sandbox Code Playgroud)
我用什么代替'???'?
如果每个用户都有一个帐户,您可以使用该SYSTEM_USER功能确定当前用户.但是,如果所有连接都通过代理帐户,这在大多数网站设置中都是典型的,那么您必须依赖于传递给Update语句的正确userId:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14670 次 |
| 最近记录: |