2011-03-24 46 views
3

使用SQL Server 2008,我有一个使用FOR XML发出结果集的查询。现在它是一个不符合要求的片段。SQL Server for XML Enclosing Element?

如何将我的结果XML封装在封闭的元素中,然后将简单的XML声明放在顶部,并使用单个模式/名称空间引用使输出符合要求?

谢谢。

回答

4

它是不可能在SQL Server中的XML数据类型的XML处理指令。 见Limitations of the xml Data Type

此代码

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

在我的C#编码器说,我加倍字符串使用“浪费”的内存,但如果这是最好的方式(和MSSQL处理字符串garbase集合),我猜这里没有问题。谢谢! – Snowy 2011-04-04 00:25:00

4

添加“WITH XMLNAMESPACES”的开头和根()到FOR XML子句:

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