gpt4 book ai didi

SQL - 空白默认命名空间

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

我有一个关系,它有一个 XML 列以以下结构存储数据

<Report id="b5d9b8da-7af4-4257-b825-b28af91dd833">
<CreatedDate>04-12-2012</CreatedDate>
<LastUpdated>04-12-2012</LastUpdated>
<Reference>abc123</Reference>
</Report>

我正在编写一个存储过程来检索所有报告并加入它们并将它们包装在一个名为报告的根节点中。到目前为止,我有以下内容;

WITH XMLNAMESPACES(DEFAULT 'http://www.defaultnamespace.com/1.0')
SELECT
@Xml =
(

SELECT
(
SELECT xml.query('.')
FROM
[database].[Reports]
WHERE
ClientId = @clientId
FOR XML PATH(''),
TYPE
)
FOR XML PATH('Reports'),
TYPE
)

虽然这会以正确的格式返回所有报告,但报告元素上存在一个空白的默认命名空间,如下所示;

<Reports xmlns="http://www.defaultnamespace.com/1.0">
<Report xmlns="" id="b5d9b8da-7af4-4257-b825-b28af91dd833">
<CreatedDate>04-12-2012</CreatedDate>
<LastUpdated>04-12-2012</LastUpdated>
<Reference>abc123</Reference>
</Report>
</Reports>

有人可以解释一种在报告元素上排除命名空间的合适方法吗?

非常感谢大家的帮助:)

最佳答案

它有点困惑而且可能效率不高,但您可以在中间 XML 上使用 XQuery 重新定义 namespace 。

不是使用 SQL Server 的 WITH XMLNAMESPACES,而是在 XQuery 中声明默认 namespace ,例如...

if object_id(N'Reports') is not null drop table [Reports];
go
create table [Reports] (
[ClientId] int not null,
[xml] [xml] not null
)
go
insert [Reports] ([ClientID], [xml])
values (1, N'<Report id="b5d9b8da-7af4-4257-b825-b28af91dd833">
<CreatedDate>04-12-2012</CreatedDate>
<LastUpdated>04-12-2012</LastUpdated>
<Reference>abc123</Reference>
</Report>');
go
declare @clientId int = 1
select (
select [xml].query('/*:Report')
from [Reports]
where ClientId = @clientId
for xml path('Reports'), type
).query('declare default element namespace "http://www.defaultnamespace.com/1.0";
for $x in /*:Reports return
<Reports>
{
for $y in $x/*:Report return
<Report>
{attribute id {$y/@id}}
{element CreatedDate {$y/*:CreatedDate/text()}}
{element LastUpdated {$y/*:LastUpdated/text()}}
{element Reference {$y/*:Reference/text()}}
</Report>
}
</Reports>')
go

这将返回以下 XML block :

<Reports xmlns="http://www.defaultnamespace.com/1.0">
<Report id="b5d9b8da-7af4-4257-b825-b28af91dd833">
<CreatedDate>04-12-2012</CreatedDate>
<LastUpdated>04-12-2012</LastUpdated>
<Reference>abc123</Reference>
</Report>
</Reports>

关于SQL - 空白默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10489871/

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