2009-10-14 49 views
8

我有一個查詢使用for xml explit返回XML結果。命名TSQL的XML結果列「for xml explicit」?

選擇... 從... ORDER BY [BatchType!1!類型名],[FormType!2!類型名],標記,XML明確家長 ,根( 'ClientImages')

但得到的列名的名字是神祕的

alt text

東西有沒有辦法來改變列名?


【答案】 我有幾個嵌套WITH報表,所以我已保存查詢的結果而不應用​​到一個臨時表@xmlTable然後將XML明確的結果爲XML,然後返回它。

declare @xmlResult xml 
set @xmlResult =( 
    select * 
    from @xmlTable 
    for xml explicit, root('ClientImages')) 

select @xmlResult as XmlResult 
+1

您使用的是哪個版本的SQL Server?在2005年及以後,絕對不需要「FOR XML EXPLICIT」 - 對於XML PATH更容易使用和更好 – 2009-10-14 14:16:43

+0

SQL Server 2005/2008 – Sung 2009-10-14 14:20:03

+0

@marc_s:我有複雜的結構,我無法使用FOR XML路徑。 – Sung 2009-10-14 14:20:41

回答

7

不,沒有,據我所知。 SQL Server Management Studio將爲您的XML自動生成這樣一個名稱。

您也許能夠先分配你的輸出到一個XML變量,然後選擇得到一個「好」列名:

DECLARE @XmlResult XML 

SELECT @XmlResult = ...... 
    FROM ....... 


SELECT @XmlResult 

但除此之外,我不知道有什麼方法影響SSMS生成的列的名稱。

馬克

+1

而不是重建'WITH'語句,我只是把結果(不應用FOR XML EXPLIT)放到臨時表中,然後簡單地將它作爲XML從臨時表中返回 - 答案更新。 – Sung 2009-10-14 14:39:30

17

- 增加一個選擇(第一)和類型(在末尾),並作爲[某件事]

 

select 
    ( 
    select 1 as tag, 
    null  as parent, 
    'algo'  as [nodo!1!attr] 
    for xml explicit, type 
    ) as [MyDesiredName] 



0

如果您需要在返回的XML命名空間:

WITH XMLNAMESPACES ('urn:http://YourNamespaceHere' as NS0) 
SELECT (...) AS XmlResult 

您也可以在子選擇中使用NS0命名空間前綴。