inserted
およびテーブルの内容をトリガーでキャプチャし、deleted
それらを xml として変更ログに保存しています。
挿入と削除の場合は、まっすぐに進みます。対応するテーブルを選択し、それを使用FOR XML
して xml に変換するだけです。
基本的に の前後の状態を表す2 つのテーブルからデータをマージしているため、更新は少し複雑であることが判明していますUPDATE
。現在UNION
、データを単一の結果セットに結合するために a を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 を使用しているため、新しい変更追跡を使用するオプションはまだありません。