2014-03-31 126 views
0

請參考下面的SQL語句:對於XML路徑 - 沒有參數

SELECT TOP 1 
     STUFF((SELECT ' ' + Name AS [text()] 
       FROM dbo.Test 
       ORDER BY id 
       FOR XML PATH('')), 1, 1, '') Concatenated 
FROM TEST 

我不明白爲什麼XML PATH沒有變,即''。我看過文檔,但找不到答案,因此也沒有找到問題的原因。

回答

0

首先,MSDN documentation on PATH mode.

傳遞到值PATH是放置您正在生成的XML的XML結構。

你可以做一個靜態元素,例如:

SELECT TOP 1 
     (SELECT ' ' + Name AS [text()] 
       FROM (select 'a' as name, 1 as id) TEST 
       ORDER BY id 
       FOR XML PATH('Root')) Concatenated 

您可以使用一鍵ROOT模式,以及有一個靜態的嵌套元素:

SELECT TOP 1 
     (SELECT ' ' + Name AS [text()] 
       FROM (select 'a' as name, 1 as id) TEST 
       ORDER BY id 
       FOR XML PATH('Child'), ROOT('Parent')) Concatenated 

然後你也可以打造出XML命名空間和查詢在您的源查詢中,然後在最終的XML路徑中使用它們,例如

select 
    id as "@id", 
    name as "SomeChild/ModelName", 
from TEST 
FOR XML PATH('Parent'), ROOT('Root') 

就你而言,你將根元素設置爲''(即沒有),所以它只是吐出你的連接文本(然後你「跺腳」它去除領先空間。)

0

FOR XML

給出結果XML而不是默認的行集。

您可以在FOR XML子句中指定多種模式,其中之一是PATH,如上所述。在您的示例中,您將使用空集作爲行元素名稱,指定元素名稱是可選的。

五合一缺省行爲可能會幫助你理解當行元素名稱設置的行爲:

SELECT ' ' + Name AS [text()] 
       FROM dbo.Test 
       ORDER BY id 
       FOR XML PATH 

FOR XML (SQL Server)

Examples: Using PATH Mode