SELECT ... FOR XML PATH(''),1,1)是什么意思?

时间:2014-02-07 09:12:48

标签: sql sql-server

我在其中一个question and here学习sql我看到了这个用法,有些正文可以让我理解xml路径('')在sql中的意思吗?是的,我通过网页浏览了一下,我对此并不是很了解!

我没有得到这个东西,现在这段代码做了什么?(只有select部分)

declare @t table
(
    Id int,
    Name varchar(10)
)
insert into @t
select 1,'a' union all
select 1,'b' union all
select 2,'c' union all
select 2,'d' 

select ID,
stuff(
(
    select ','+ [Name] from @t where Id = t.Id for XML path('')
),1,1,'') 
from (select distinct ID from @t )t

2 个答案:

答案 0 :(得分:65)

这里没有真正需要学习的技巧。将多行数据连接成一个字符串只是一个可爱的技巧。与使用XML格式化功能相比,它更像是一种奇特的功能使用。

SELECT ',' + ColumnName ... FOR XML PATH('')

基于组合ColumnName列中的多行数据,生成一组逗号分隔值。它将生成类似,abc,def,ghi,jkl的值。

STUFF(...,1,1,'')

然后用于删除前一个技巧生成的前导逗号,有关其参数的详细信息,请参阅STUFF

(奇怪的是,很多人倾向于将这种生成逗号分隔值的方法称为“STUFF方法”,尽管STUFF只负责最后一点修剪)

答案 1 :(得分:25)

您引用的SQL用于MSSQL中的字符串连接。

通过使用,for xml path前置到结果中来连接行 ,a,b,c,d。然后使用stuff替换,的{​​{1}},从而删除它。

中的('')用于删除正在自动创建的包装器节点。否则它看起来像for xml path

<row>,a,b,c,d</row>