我在触发器中捕获inserted
和deleted
表的内容并将它们作为 xml 保存到更改日志中。
对于直接插入和删除它。只需在对应表上进行选择并使用FOR XML
将其转换为 xml。
更新变得有点棘手,因为您要合并两个表中的数据,这些表基本上代表UPDATE
. 现在我正在使用 aUNION
将数据从inserted
和deleted
合并到一个结果集中。
SELECT [Column1], [Column2]
FROM
(SELECT [Column1], [Column2]
FROM inserted
UNION
SELECT [Column], [Column2]
FROM deleted) as Rows
FOR XML RAW, ELEMENTS
输出类似于:
<!-- Comments added for clarity. They don't appear in the actual output -->
<row> <!-- After -->
<Column1>Bar</Column1>
<Column2>Ipsum</Column2>
</row>
<row> <!-- Before -->
<Column1>Foo</Column1>
<Column2>Lorem</Column2>
</row>
我希望输出是:
<row>
<Column1>
<Before>Foo</Before>
<After>Bar</After>
</Column1>
<Column2>
<Before>Lorem</Before>
<After>Ipsum</After>
</Column2>
</row>
或者可能
<row>
<Column1 Before="Foo" After="Bar" />
<Column2 Before="Lorem" After="Ipsum" />
</row>
但我不确定如何做到这一点。有任何想法吗?
注意:我们的一些客户仍在使用 SQL Server 2005,因此使用新的更改跟踪确实不是一个选项。