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

我正在学习SQL中的一个问题 ,在这里我看到了这个的用法,可以让我明白什么XMLpath('')在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 

在这里学习没有真正的技术。 将多行数据连接成一个string只是一个可爱的把戏。 XML格式化function的使用比使用XML格式function更为古怪。

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

根据组合ColumnName列中的多行数据生成一组逗号分隔值。 它会产生一个像,abc,def,ghi,jkl

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

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

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

SQL引用的SQL用于MSSQLstring连接。

它通过预先将行连接起来,使用for xml path来得到结果,a,b,c,d 。 然后使用它replace的stuff , ,从而将其删除。

('') for xml path用于删除正在自动创build的包装节点。 否则,它看起来像<row>,a,b,c,d</row>

 ... stuff( ( select ',' + CAST(t2.Value as varchar(10)) from #t t2 where t1.id = t2.id for xml path('') ) ,1,1,'') as Value ... 
  • 更多的东西
  • 更多的XMLpath