审计:如何在没有触发器的情况下将 SYSTEM_USER 写入表

问题描述

我正在尝试找到一种方法,可以在插入或更新记录时自动将 SYstem_USER 的值写入表中的列。

过去我使用 INSTEAD OF 触发器来实现这种事情,但我使用临时表来维护每条记录的审计历史,它们不允许使用触发器,因此选项已出。

我还考虑向每个表添加一个标识列并在应用程序层为此指定一个值,但是如果有人直接更新数据库(例如:通过 sql)并且业务需求指定,这将失败必须处理这种情况。

在研究这个并使用选项时,我尝试使用表中的计算字段,它在历史时态表上运行良好,但在“当前”表中它总是返回查询用户名称,而不是上次写入记录的用户

有什么办法可以让数据库在写入时自动设置不涉及触发器的字段的值?

解决方法

也许您可以尝试使用默认值

create table #test (id int,name varchar(50),username varchar(50) default (system_user))

insert into #test (id,name) values (1,'john'),(2,'rambo')

select * from #test

在我的情况下返回

id name  username
1  john  sa
2  rambo sa