6
SQL Server 2008のTSQLクエリでXML出力の一部を照合しようとしています。私は一致しているXMLは、アイテムのリストを返すことができます。リストはノード名ではなく属性名で識別されます。TSQL FOR XML Pathによって作成されたElementNodeに属性を追加します
XMLパス関数はラッパーノードを返しますが、そのノードに属性を追加する方法が見つかりません。私の場合は、彼らが選択したテーブル名に基づいてハードコードされた値になります。
2つのリストを分離しておくために、そこに「x」として「x」があります。私の実際のデータでは、これらは異なるノードにあるので問題はありません。問題は、単に「リスト」ノードに属性を追加する方法です。ここで
がSQL Fiddle page for the example belowです:
サンプル・スキーマ
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>
所望の出力を選択します(「Nを追加しますame "属性をリストラッパーに追加します)。
<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>