Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何正确实施";“每现场历史记录”;通过SQL Server中的触发器(2008)_Sql Server_Triggers - Fatal编程技术网

Sql server 如何正确实施";“每现场历史记录”;通过SQL Server中的触发器(2008)

Sql server 如何正确实施";“每现场历史记录”;通过SQL Server中的触发器(2008),sql-server,triggers,Sql Server,Triggers,因此,我面临的挑战是必须将每个字段更改的数据记录在表中。现在,我显然可以使用触发器(我以前从未使用过触发器,但我可以想象这并不困难),但我还需要能够链接执行更改的日志,这就是问题所在。触发器不会知道是谁在执行更改,我也不能传入用户id 那么,我该如何做我需要做的事情呢?如果说我有这些表格有帮助: Employees { EmployeeId } Jobs { JobId } Cookies { CookieId EmployeeId -> Employe

因此,我面临的挑战是必须将每个字段更改的数据记录在表中。现在,我显然可以使用触发器(我以前从未使用过触发器,但我可以想象这并不困难),但我还需要能够链接执行更改的日志,这就是问题所在。触发器不会知道是谁在执行更改,我也不能传入用户id

那么,我该如何做我需要做的事情呢?如果说我有这些表格有帮助:

Employees {
    EmployeeId
}

Jobs {
    JobId
}

Cookies {
    CookieId
    EmployeeId -> Employees.EmployeeId
}
因此,正如您所看到的,我有一个
Cookies
表,应用程序使用该表来验证会话,我可以从中推断出用户,但同样,如果我想更改
作业
表,我无法让触发器知道它

非常感谢您的帮助

我们用于设置调用数据库的用户。这样,我们的应用程序级安全性就可以一直在DB代码中实现。这似乎是一种开销,但实际上对我们来说并没有性能问题

make_db_call() {
   Set context_info --some data representing the user----
   do sql incantation
}
分贝

要获取从“已删除”伪表中选择的触发器内的上一个值,以及要获取要输入的值,请从“已插入”伪表中选择

在发出linq2sql查询之前,请发出如下命令

context.ExecuteQuery('exec some_sp_to_set_context ' + userId')
或者更优选地,在eqch查询之前执行上述操作。有关示例,请参见


我们不使用多个SQL登录,因为我们依赖于连接池,并且还将db调用者锁定为有限的用户。

哇,这将花费我一些时间阅读,我会回来…如果您有一个基于服务的数据层作为单个身份运行,那么您将不得不通过用户ID…我非常喜欢您的解决方案,我面临的问题是(可能是因为睡眠不足)如何在Linq2Sql上下文中完成所有这些工作?然后在触发器中,我如何获得以前的值和更新的值?我已经编辑了答案以解决您的评论。让我知道结果如何。
context.ExecuteQuery('exec some_sp_to_set_context ' + userId')