DECLARE @s VARCHAR(100) SET @s='a,b,c,dd,ee,f,aa,a,aa,f' ;WITH fc AS --定义cte命名,将@s转换为一个表结构 ( SELECT DISTINCT b.v v from (SELECT CAST('<r>' + REPLACE(@s,',','</r><r>') + '</r>' AS XML) x) a CROSS APPLY (SELECT v=t.x.value('.','VARCHAR(10)') from a.x.nodes('//r') AS t(x) ) b ) SELECT STUFF(b.v.value('/r[1]','varchar(100)'),1,1,'') from (SELECT v=(SELECT ',' + v from fc FOR XML PATH(''),ROOT('r'),TYPE)) b
STUFF(b.v.value('/r[1]','varchar(100)'),1,1,'')具体什么意思? v=(SELECT ',' + v from fc FOR XML PATH(''),ROOT('r'),TYPE)也不是很明白! value方法做何解释,;WITH fc AS 这个不是很明白,没有书籍看,所以只有问各位大虾了。 SQL Server数据库开发的二十一条军规 http://topic.csdn.net/u/20080808/14/5c354b26-3556-44f1-a1d7-bbaf53c7ead9.html 这个回复错了.