我正在尝试在 SQL Server 2008 TSQL 查询中匹配一些 XML 输出。我匹配的 XML 可以返回项目列表。列表由属性名称标识,而不是节点名称。
XML Path 函数将返回一个包装器节点,但我找不到向该节点添加任何属性的方法。在我的情况下,它们将是基于我运行它们选择的表名的硬编码值。
我在那里将'x'作为'x'来保持两个列表分开。在我的实际数据中这不是问题,因为它们位于不同的节点中。问题只是如何将属性添加到“列表”节点。
示例架构
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>
所需输出:(将“名称”属性添加到列表包装器。)
<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>