Ger*_*iss 7 sql t-sql sql-server sql-server-2005
我想将对表中所有字段所做的更改记录到另一个表中.这将用于保存对该表所做的所有更改的历史记录(您的基本更改日志表).
在SQL Server 2005中执行此操作的最佳方法是什么?
我将假设逻辑将放在一些触发器中.
在不对所有字段进行硬编码的情况下,循环检查所有字段检查更改的好方法是什么?
正如您从我的问题中看到的那样,示例代码将非常受欢迎.
我注意到SQL Server 2008有一个名为Change Data Capture(CDC)的新功能.(这是CDC上一个不错的Channel9视频).这与我们正在寻找的类似,除了我们使用的是SQL Server 2005,已经就地存在日志表布局,并且还记录了进行更改的用户.当一个字段可能改变时,我也发现很难证明写出整个记录的前后图像是合理的.
我们当前的日志文件结构具有字段名称,旧数据,新数据的列.
提前谢谢,祝你有个愉快的一天.
2008年12月22日更新:我做了一些更多的研究,并在Live Search QnA上找到了这两个答案
您可以创建一个触发器来执行此操作.请参阅 如何审核对sq l服务器数据的更改.
您可以使用触发器将数据更改记录到日志表中.您还可以从www.lumigent.com购买Log Explorer 并使用它来读取事务日志以查看用户进行了更改.但是,数据库需要完全恢复此选项.
更新于2008年12月23日:我还想要一个简洁的方法来比较改变的内容,这看起来像是PIVOT的反面,我在SQL中发现它被称为UNPIVOT.我现在倾向于在INSERTED和DELETED表上使用UNPIVOT触发器.我很好奇,如果这已经完成,所以我正在搜索" unpivot deleted inserted ".
小智 5
很晚但希望它对其他读者有用......
简短的回答是,没有适合所有人的"正确"解决方案.这取决于要求和被审计的系统.
触发器
在SQL Server中创建审计触发器使用触发器将
更改更改为数据库表
CDC
阅读交易日志
在sql server 2008 SQL Server事务日志浏览器/分析器中读取日志文件(*.LDF)
第三方工具
我使用过ApexSQL的几个审计工具,但也有来自Idera(合规经理)和Krell软件(全方位审计)的好工具
ApexSQL Audit - 基于触发器的审计工具.生成并管理审计触发器
ApexSQL日志 - 允许通过读取事务日志进行审核
在 SQL '05 下,您实际上不需要使用触发器。只需看一下 OUTPUT 子句即可。OUTPUT 适用于插入、更新和删除。
例如:
INSERT INTO mytable(description, phone)
OUTPUT INSERTED.description, INSERTED.phone INTO #TempTable
VALUES('blah', '1231231234')
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用 #TempTable 执行任何您想要的操作,例如将这些记录插入到日志记录表中。
附带说明一下,这是捕获身份字段值的极其简单的方法。
| 归档时间: |
|
| 查看次数: |
9142 次 |
| 最近记录: |