私は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)')
個別に取得するエンティティ。
皆さん、ありがとうございました