简化案例:
Database table Cars
ID (int)
Name (varchar)
Model (varchar)
在这个表上有一个更新触发器,它会将类似“id为的汽车名称已更改”的内容插入到另一个表中
从后端运行一个简单的查询
UPDATE Cars SET Name='My First Car' WHERE ID = 1
我想完成的是在查询旁边发送一个附加值,这样我就可以更改触发器,执行如下操作:“id为的汽车名称已被id为的用户更改”
我正在使用sql server 2017(v14)
我有什么选择?
2条答案
按热度按时间uz75evzq1#
如果使用sql server 2016,请使用
SESSION_CONTEXT
否则使用CONTEXT_INFO
并在调用更新之前存储用户信息。然后,无论哪种方式,在触发器中提取用户信息并将其用于日志信息。
fruv7luv2#
触发器可用的信息仅限于表中触发器所在的信息,或系统通常可用的信息。
由于用户不在原始表中,因此通常需要数据对系统可用。像这样的数据相当多。例如,您可以使用内置的
db_name()
功能。系统可以根据连接属性提供一些信息。例如
orignal_login()
函数将为您提供实际连接到sql server的用户的名称。如果你有一张table
Users
在某个地方,比如说,(UserName, UserId)
,如果该表中的用户名与sql server登录的实际登录名匹配,则可以使用original_login()
要加入该表,请拉出用户名,现在您有了用户id:正如评论中提到的,由于您的应用程序是作为特定于应用程序的帐户连接的,这当然对您没有帮助。在这种情况下,你可以尝试上下文信息