我在其中一个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
答案 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>