0
2つのxml変数(@ xml1 & @ xml2)があり、それぞれのノードの値を比較し、異なるノードのみを含むxmlを返す必要があります。T-SQL:2のXMLを比較し、値の異なるノードを返す
だから私はこれらの2つのXML変数を持っている、と言う:私は、私は必要なもののようなものを返す次のクエリを持って
SELECT @xml1 = N'<row>
<description>sample description</description>
</row>', @xml2 = N'<row>
<description>updated sample description</description>
</row>'
、しかし:私はそれを返すしたい
declare @xml1 xml = N'<row>
<id>1</id>
<name>record title</name>
<description>sample description</description>
</row>'
declare @xml2 xml = N'<row>
<id>1</id>
<name>record title</name>
<description>updated sample description</description>
</row>'
そのなど、&は、XMLノードを持たないアンピボット:
SELECT
NV.NodeName,
OV.NodeValue OldValue,
NV.NodeValue NewValue
FROM
(SELECT T.N.value('local-name(.)', 'nvarchar(100)') NodeName,
T.N.value('.', 'nvarchar(100)') NodeValue
FROM @xml1.nodes('/row/*') T(N)) NV
CROSS APPLY (SELECT T.N.value('local-name(.)', 'nvarchar(100)') NodeName,
T.N.value('.', 'nvarchar(100)') NodeValue
FROM @xml2.nodes('/row/*') T(N)) OV
WHERE OV.NodeName = NV.NodeName AND OV.NodeValue <> NV.NodeValue
パフォーマンスが鍵です:Thのコードがトリガーに入っているので、速く実行する必要があり、遅い傾向があるのでPIVOTを使用することを恐れています。値を比較して値をxml値として返すより良い方法があることを期待しています。
アイデア? ありがとうございます! -