我有 2 个类似的 xml(标签是动态的):
Declare @OldXml xml = <Data><testId>BE7F2CDE-0D31-4E47-AA07-CE179F1E47C2</testId><description>Test1</description><Name>aaaa</Name><createdBy>1111</createdBy><updatedBy>1111</updatedBy></Data>
Declare @NewXml xml = '<Data><testId>BE7F2CDE-0D31-4E47-AA07-CE179F1E47C2</testId><description>Test2</description><Name>bbbb</Name><createdBy>1111</createdBy><updatedBy>2222</updatedBy></Data>'
我想将它们之间的差异输入到另一个表格中:
entity Field OldValue NewValue
-----------------------------------------------------------------------------------------
BE7F2CDE-0D31-4E47-AA07-CE179F1E47C2 description Test1 Test2
BE7F2CDE-0D31-4E47-AA07-CE179F1E47C2 Name aaaa bbbb
我怎样才能做到这一点?
你好,经过长时间的搜索,我找到了答案
SELECT DISTINCT
foo.bar.value('local-name(.)','VARCHAR(14)') as FieldName,
foo.bar.value('./.','VARCHAR(14)') as OldValue ,
foo1.bar1.value('./.','VARCHAR(14)') as NewValue ,
FROM
@OldXml.nodes('/Data/*') AS foo(bar)
INNER JOIN @NewXml.nodes('/Data/*') AS foo1(bar1) ON foo.bar.value('local-name(.)','VARCHAR(14)') = foo1.bar1.value('local-name(.)','VARCHAR(14)')
AND foo.bar.value('./.','VARCHAR(14)') <> foo1.bar1.value('./.','VARCHAR(14)')
我将单独获得的实体。
谢谢你们