跟踪由 CDC 确定的进行更改的人员。
按照我的 datetime hack的思路,我尝试了相同的方法,将 suser_sname 添加为 cdc 更改跟踪表上具有默认值的新字段。但是,这似乎返回了 cdc 进程的所有者,而不是在基表上发起更改的用户。我也尝试了 original_login ,但它返回了 sql 服务帐户登录名。同样,可能与 cdc 进程相关联,而不是与发起更改的用户相关联。
我在 stack-overflow 上发现了一个类似的问题,但除了从前端或通过触发器跟踪更改之外没有其他答案,这似乎违背了使用 cdc 的目的。我不会重新发布,但由于原版在 stackoverflow 上,我想我会在这里尝试一下,特别是如果 R2 或 2012 引入了更好的方法。
所以,简而言之:我怎么知道是谁在变更数据捕获中做出了改变?
我为此提交了一个错误,但它被“按设计”关闭。
http://connect.microsoft.com/SQLServer/feedback/details/283707/cdc-options-to-capture-more-data-username-date-time-etc
不幸的是,您将不得不使用另一种技术(例如 SQL 审计或触发器)来获取此信息(以及一些自定义代码以尽可能多地将其与 CDC 数据相关联)。我还在SQL Server MVP Deep Dives(第 1 卷)一书的“SQL Server Audit、Change Tracking 和 Change Data Capture”一章中写到了这个缺陷。
很抱歉,我没有为您提供更好的解决方法,但 CDC 的内置功能无法满足您的要求。:-(
您可以添加列并在表上设置触发器以在插入/更新/删除时填充用户,然后 cdc 将存储它。您可以通过使用上下文信息传递用户名从 UI 中获取用户名,也可以从实际会话中获取用户名
您能否在主表上添加一个 UpdatedBy 字段,将其设置为默认值 SUSER_NAME() 或 ORIGINAL_LOGIN() 并由 CDC 填充该数据?我相信这将为您提供您正在寻找的相同信息。