J'ai 2 variables xml (@ xml1 & @ xml2) et je dois comparer les valeurs dans chaque nœud et retourner un xml qui contient seulement les nœuds qui sont différents .T-SQL: Comparer 2 XML et renvoyer des nœuds avec des valeurs différentes
dire, j'ai ces deux variables 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>'
Je voudrais qu'il revienne:
SELECT @xml1 = N'<row>
<description>sample description</description>
</row>', @xml2 = N'<row>
<description>updated sample description</description>
</row>'
je la requête suivante qui retourne un peu ce que j'ai besoin, mais son pivotée & ne possède pas les noeuds xml, etc .:
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
PERFORMANCE EST lA CLÉ: Th Le code est dans un trigger, donc il doit courir vite et j'ai peur d'utiliser PIVOT car il a tendance à être lent. J'espère qu'il y a une meilleure façon de comparer et de renvoyer les valeurs déjà en tant que valeur XML.
Des idées? Merci d'avance!