請參考下面的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
沒有變,即''
。我看過文檔,但找不到答案,因此也沒有找到問題的原因。
請參考下面的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
沒有變,即''
。我看過文檔,但找不到答案,因此也沒有找到問題的原因。
首先,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')
就你而言,你將根元素設置爲''(即沒有),所以它只是吐出你的連接文本(然後你「跺腳」它去除領先空間。)
FOR XML
給出結果XML
而不是默認的行集。
您可以在FOR XML
子句中指定多種模式,其中之一是PATH
,如上所述。在您的示例中,您將使用空集作爲行元素名稱,指定元素名稱是可選的。
五合一缺省行爲可能會幫助你理解當行元素名稱設置的行爲:
SELECT ' ' + Name AS [text()]
FROM dbo.Test
ORDER BY id
FOR XML PATH