有没有一种优雅的方法来跟踪 SQL Server 2008 中一个表的所有列的修改
我的数据库中有一个包含 100 列的表。我想创建一个触发器来审核每个更新操作的修改。
我能想到的是为所有列创建更新子句,但它们都是类似的脚本。那么有什么优雅的方法可以做到这一点吗?
There is a table in my database containing 100 columns. I want to create a trigger to audit the modification for every update operation.
What I can think is to create the update clause for all columns but they are all similar scripts. So is there any elegant way to do that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
检查更改数据捕获
更新
CDC 提供对变更的所有详细信息的跟踪。自 SQL Server 2008 起可用。
(更改数据捕获仅在 SQL Server 的企业版、开发人员版和评估版上可用。
来源: http://msdn.microsoft.com/en-us/library/ bb522489.aspx)
更轻量级的解决方案是更改跟踪(同步框架),一个之前提到的code4life,自 SQL Server 2005 起可用。
更新 2:
相关问题(有很多子链接):
历史表优点、缺点和陷阱 - 使用触发器、存储过程或在应用程序级别
在 SQL Server 中实现审核表的建议?
软删除是个好主意吗?
对 SQL Server 数据库进行版本控制
http://www .simple-talk.com/sql/database-administration/sql-server-audit-magic-without-a-wizard/
Check Change Data Capture
Update
CDC provides tracking of all details of changes. Available since SQL Server 2008.
(Change data capture is available only on the Enterprise, Developer, and Evaluation editions of SQL Server.
Source: http://msdn.microsoft.com/en-us/library/bb522489.aspx)
More lightweight solution is Change Tracking (Sync Framework), the one code4life mentioned before, available since SQL Server 2005.
Update2:
Related questions (with a lot of sublinks):
History tables pros, cons and gotchas - using triggers, sproc or at application level
Suggestions for implementing audit tables in SQL Server?
Are soft deletes a good idea?
Versioning SQL Server database
http://www.simple-talk.com/sql/database-administration/sql-server-audit-magic-without-a-wizard/
MSDN 上有这样的资源,您可能会发现它很有帮助:
跟踪服务器数据库中的更改(包括SQL Server 2008)
不过,我不确定您是否使用 SQL Server 2008。
There's this resource on MSDN which you might find helpful:
Tracking Changes in the Server Database (including SQL Server 2008)
I'm not sure if you're using SQL Server 2008 though.
代码生成?
您是否看过 http://autoaudit.codeplex.com/ 使用的技术?
Code generation?
Have you looked at the techniques which http://autoaudit.codeplex.com/ uses?
理论上,您可以使用 1 个触发器并检查 COLUMNS_UPDATED() 来了解哪些列已更改。
(未测试)
在此处查看更多信息
Theoretically, you can use 1 trigger and check COLUMNS_UPDATED() to know which columns has changed.
(not be tested)
See more here