SQL Server FOR XML 封闭元素?

发布于 2024-10-26 11:12:44 字数 141 浏览 1 评论 0原文

使用 SQL Server 2008,我有一个使用 FOR XML 发出结果集的查询。现在它是一个不合规的片段。

如何将结果 XML 包装在封闭元素中,然后在顶部放置一个简单的 XML 声明和单个架构/命名空间引用以使输出兼容?

谢谢。

Using SQL Server 2008, I have a query that emits a result set using FOR XML. Right now it is a non-compliant fragment.

How can I wrap my result XML in an enclosing element and then put a simple XML declaration on top with a single schema/namespace reference to make the output compliant?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

伤感在游骋 2024-11-02 11:12:44

SQL Server 中的 XML 数据类型不可能包含 XML 处理指令。

请参阅XML 数据类型的限制

code

declare @XML xml =  
  '<?xml version="1.0"?>
   <root>Value</root>'

select @XML

具有输出

<root>Value</root>

您可以使用适当的 XML 处理指令将 XML 构建为字符串。

declare @XML xml = '<root>Value</root>'
declare @XMLStr nvarchar(max) = '<?xml version="1.0"?>'
  
set @XMLStr = @XMLStr + cast(@XML as nvarchar(max))

select @XMLStr

输出

--------------------------------------------------------------------------
<?xml version="1.0"?><root>Value</root>

It is not possible to have the XML processing instruction in a XML datatype in SQL Server.

See Limitations of the XML Data Type

This code

declare @XML xml =  
  '<?xml version="1.0"?>
   <root>Value</root>'

select @XML

Has the output

<root>Value</root>

You can build the XML as a string with the XML processing instruction in place.

declare @XML xml = '<root>Value</root>'
declare @XMLStr nvarchar(max) = '<?xml version="1.0"?>'
  
set @XMLStr = @XMLStr + cast(@XML as nvarchar(max))

select @XMLStr

Output

--------------------------------------------------------------------------
<?xml version="1.0"?><root>Value</root>
沩ん囻菔务 2024-11-02 11:12:44

将“WITH XMLNAMESPACES”添加到开头,并将 ROOT() 添加到 FOR XML 子句:

WITH XMLNAMESPACES ( DEFAULT 'http://namespace_uri_here' )
SELECT * 
FROM TABLE
FOR XML AUTO, ROOT('TopLevel')

Add "WITH XMLNAMESPACES" to the beginning and a ROOT() to the FOR XML clause:

WITH XMLNAMESPACES ( DEFAULT 'http://namespace_uri_here' )
SELECT * 
FROM TABLE
FOR XML AUTO, ROOT('TopLevel')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文