我有2个XML赞(标签是动态的):之间插入三角洲个XML向表SQL
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)')
实体,我会分别得到。
谢谢大家
喜一搜索一个长搜索 SELECT DISTINCT foo.bar.value('local-name(。)','VARCHAR(14)')FieldName, foo.bar.value('./。','VARCHAR ('/ Data/*')AS foo(bar)')as OldValue, foo1.bar1.value('./。','VARCHAR(14)')NewValue, FROM @ OldXml.nodes INNER JOIN @ NewXml.nodes('/ Data/*')AS foo1(bar1)ON foo.bar.value('local-name(。)','VARCHAR(14)')= foo1.bar1.value '局部名(。)', 'VARCHAR(14)') \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t AND foo.bar.value(” ./。 '' VARCHAR(14) ')<> foo1.bar1.value(' ./。 '' VARCHAR (14)') – user2145201
谢谢。你的答案很好 – user2145201