gpt4 book ai didi

xml - 将属性添加到由 SQL FOR XML 路径创建的元素节点

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:25 25 4
gpt4 key购买 nike

我正在尝试匹配 SQL Server 2008 TSQL 查询中的一些 XML 输出。我正在匹配的 XML 可以返回项目列表。列表由属性名称标识 - 而不是节点名称。

XML 路径函数将返回一个包装器节点,但我找不到向该节点添加任何属性的方法。在我的例子中,它们将是基于我正在运行的表名的硬编码值,它们是根据它们选择的。

我在其中将“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>

期望的输出:(将“名称”属性添加到列表包装器。)

<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>

最佳答案

这似乎给出了正确的输出。需要额外级别的 XML PATH 嵌套才能将属性添加到 List 节点:

SELECT
(SELECT 'Table1' AS '@name',
(SELECT Value AS '@I'
FROM Table1
FOR XML PATH ('L'))
FOR XML PATH('List'), TYPE)
,'x' AS'x'
,( SELECT 'Table2' AS '@name',
(SELECT Value AS '@I'
FROM Table2
FOR XML PATH ('L'))
FOR XML PATH('List'), TYPE
)

FOR XML PATH;

关于xml - 将属性添加到由 SQL FOR XML 路径创建的元素节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com