我们有一个由客户(多个)组成的程序 - >网关 - >发动机...... 现在客户想要一个功能,这将使他们能够看到什么以及由谁进行了某些更改,因此我们需要将更改保存到某个历史记录表中。
问题:
因为可能有多个用户并行连接到引擎,我们怎么知道,如果我们使用触发器实现历史跟踪,哪个用户做了一些更改,我们如何在sql server中识别它(在之前的一些程序中,与sql的连接是顺序的,它们在处理之前将用户id保存到表中并且触发器使用该id)。
关于与SQL Server的连接 - 有些东西是使用EF实现的,有些是SP,有些是使用动态查询。
CDC不是一种选择,因为并非所有客户都拥有企业版本,甚至还必须进行一些“黑客攻击”才能使其正常运行。
我读到CONTEXT_INFO可用于将当前用户ID保存到它,然后在sql中读取该值...有人试过吗?
有些人甚至会在表格中添加列,例如修改日期和用户ID,但我们希望尽可能避免使用。
那么......实现这一目标的最佳方法是什么? :)
答案 0 :(得分:0)
首先,这可能会极大地影响您的数据库性能和磁盘空间......
但是如果你坚持,你可以想出一个简单的脚本,它迭代你要监视的所有表的列表,并动态创建(通过sp_executesql)相关的触发器。
然后使用这些触发器的名称约定可能会帮助您以后维护它们(例如,在数据密集型操作时禁用所有这些触发器等)。
我建议您尝试说服您的客户仅为少数关键数据表激活此功能。此外,始终保持一个停用所有这些触发器的脚本。