2011-03-24 31 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')