【发布时间】:2021-08-31 10:13:24
【问题描述】:
我正在尝试找到一种方法,以便在插入或更新记录时自动将 SYSTEM_USER 的值写入表中的列。
过去我使用 INSTEAD OF 触发器来实现这种事情,但我使用临时表来维护每条记录的审计历史记录,它们不允许使用触发器,所以选项已失效。
我还考虑在每个表中添加一个标识列并在应用层为此指定一个值,但是如果有人直接更新数据库(例如:通过 SQL)并且业务需求指定,这将失败必须处理这种情况。
在研究此问题并使用选项时,我尝试在表中使用计算字段,该字段在历史时态表上运行良好,但在“当前”表中,它始终返回查询用户的名称,而不是上次写入记录的用户。
有什么方法可以让数据库在写入时自动设置不涉及触发器的字段的值?
【问题讨论】:
-
您仍然可以使用
INSTEAD OF触发器,只在表上的模式绑定视图上定义它,而不是在表本身上。您可能需要稍微调整权限以允许人们通过视图而不是表本身插入/更新,但我认为如果您仅授予INSERT/UPDATE视图权限,所有权链接应该会处理它而不是桌子。 (如果没有,EXECUTE AS是必需的,那么您可能想要使用ORIGINAL_LOGIN()而不是SYSTEM_USER。)
标签: sql-server entity-framework ddl temporal-tables