【发布时间】:2009-03-02 22:08:13
【问题描述】:
我曾开发过几个将 XML 数据保存到数据库中的应用程序。迄今为止,它们都只是用新的 XML 内容覆盖了当前的 XML 内容。
我想将对 XML 的更改保存到数据库中,但不覆盖数据库中当前的内容。
除了为更改创建新行并保持旧行不变,我还可以使用哪些其他选项?
我曾考虑将差异保存为实际的文本差异,但这并不总是适用于 XML。
我想要这个是不是疯了?
【问题讨论】:
标签: .net sql-server xml diff
我曾开发过几个将 XML 数据保存到数据库中的应用程序。迄今为止,它们都只是用新的 XML 内容覆盖了当前的 XML 内容。
我想将对 XML 的更改保存到数据库中,但不覆盖数据库中当前的内容。
除了为更改创建新行并保持旧行不变,我还可以使用哪些其他选项?
我曾考虑将差异保存为实际的文本差异,但这并不总是适用于 XML。
我想要这个是不是疯了?
【问题讨论】:
标签: .net sql-server xml diff
您可能需要考虑在数据表旁边添加一个审计表。
它只会包含您有兴趣跟踪历史记录的列以及日期时间列(记录更改日期),通常您还需要一些用户信息(即从连接中拉出登录用户或在插入/更新中提供用户名)。
然后在您的数据表上创建一个更新触发器,并将新行从已删除的伪表中插入您的审计表中。如果您正在执行更新,这将包含更新之前的数据,因为更新实际上是删除和插入。
还有一个更通用的解决方案,它建议使用 SQL CLR 抽象出实现一个唯一的审计表并为您希望审计的每个数据表触发:http://www.sqljunkies.ddj.com/Article/4CD01686-5178-490C-A90A-5AEEF5E35915.scuk
【讨论】: