SQL Server2008TSQLクエリの一部のXML出力を一致させようとしています。照合しているXMLは、アイテムのリストを返すことができます。リストは、ノード名ではなく、属性名で識別されます。
XMLパス関数はラッパーノードを返しますが、そのノードに属性を追加する方法が見つかりません。私の場合、それらは、実行しているテーブル名に基づいてハードコードされた値になります。
2つのリストを分離しておくために、そこに「x」として「x」があります。私の実際のデータでは、これらは異なるノードにあるため、問題はありません。問題は、「リスト」ノードに属性を追加する方法だけです。
以下の例のSQLフィドルページは次のとおりです。
サンプルスキーマ
create table Table1 (Value varchar(50));
create table Table2 (Value varchar(50));
insert Table1 values
('A'), ('B'), ('C');
insert Table2 values
('X'), ('Y'), ('Z');
サンプル選択
select
(
select Value as '@I'
from Table1
for XML PATH('L'), TYPE
) as List,
'x' as 'x', -- needed to keep the Lists apart.
(
select Value as '@I'
from Table2
for XML PATH('L'), TYPE
) as List
for XML PATH
実際の出力
<row>
<List>
<L I="A"/>
<L I="B"/>
<L I="C"/>
</List>
<x>x</x>
<List>
<L I="X"/>
<L I="Y"/>
<L I="Z"/>
</List>
</row>
必要な出力:(「Name」属性をリストラッパーに追加します。)
<row>
<List Name='Table1'> <!-- Added Attribute "Name" here -->
<L I="A"/>
<L I="B"/>
<L I="C"/>
</List>
<x>x</x>
<List Name='Table2'> <!-- Added Attribute "Name" here -->
<L I="X"/>
<L I="Y"/>
<L I="Z"/>
</List>
</row>