0
我有2個xml變量(@ xml1 & @ xml2),我需要比較每個節點中的值並返回一個只包含不同節點的xml 。T-SQL:使用不同的值比較2個XML和返回節點
所以說,我有這2 XML變量:
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>'
我想它返回:
SELECT @xml1 = N'<row>
<description>sample description</description>
</row>', @xml2 = N'<row>
<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
性能是關鍵:釷代碼是在觸發器中,所以它需要運行得很快,我害怕使用PIVOT,因爲它往往很慢。我希望有一個更好的方法來比較和返回已經作爲一個XML值的值。
任何想法? 在此先感謝!