Sql 对于XML路径-无参数

Sql 对于XML路径-无参数,sql,sql-server,Sql,Sql Server,请参见下面的SQL语句: SELECT TOP 1 STUFF((SELECT ' ' + Name AS [text()] FROM dbo.Test ORDER BY id FOR XML PATH('')), 1, 1, '' ) Concatenated FROM TEST 我不明白为什么XML路径没有参数,即'。我查看了文档,但找不到答案,因此也找不到问题的原因。for

请参见下面的SQL语句:

SELECT TOP 1
       STUFF((SELECT ' ' + Name AS [text()]
                FROM dbo.Test 
               ORDER BY id
                 FOR XML PATH('')), 1, 1, '' ) Concatenated
 FROM TEST
我不明白为什么
XML路径
没有参数,即
'
。我查看了文档,但找不到答案,因此也找不到问题的原因。

for XML

将结果显示为
XML
,而不是默认行集

您可以在
FOR XML
子句中指定多种模式,其中一种模式是如上所述的
PATH
。在您的示例中,使用空集作为行元素名称,指定元素名称是可选的

观察默认行为可以帮助您了解设置行元素名称时的行为:

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

首先

传递给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
您还可以使用根模式拥有静态嵌套元素:

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')
在您的例子中,您将根元素设置为“”(即nothing),这样它只会吐出连接的文本(然后“填充”它以删除前导空格)