为什么STUFF删除XML?

请参阅下面的DDL:

create table #Test (id int,Name varchar(30))

insert into #Test values (1,'Ian')
insert into #Test values(1,'Mark')
insert into #Test values(2,'James')
insert into #Test values(3,'Karen')
insert into #Test values(3,'Suzie')

和下面的SQL:

select * from #Test for xml path('')

其中返回:

<id>1</id>
<Name>Ian</Name>
<id>1</id>
<Name>Mark</Name>
<id>2</id>
<Name>James</Name>
<id>3</id>
<Name>Karen</Name>
<id>3</id>
<Name>Suzie</Name>

这是我所期望的。 现在看到下面的SQL:

SELECT distinct ID,
STUFF( (select ','+ NAME from #Test as #Test1 where #Test1.id=#Test2.id FOR XML PATH('')),1,1,'') FROM #Test as #Test2

其中返回:

1   Ian,Mark
2   James
3   Karen,Suzie

这是我想要返回的。 但是,XML元素去哪了?


这不是STUFF ,这只是为了消除多余的第一,

concat删除XML的东西:

','+ NAME
or
NAME + ''

不要问我为什么这样工作,也许它记录在某处:-)


Inner for XML语句仅用于生成连接结果。 为xml语句添加外层:

SELECT distinct ID,
    STUFF( (select ','+ NAME 
            from Test as #Test1 
            where #Test1.id=#Test2.id 
            FOR XML PATH('')),1,1,'') as Names
FROM Test as #Test2
FOR XML PATH('')

输出:

 <ID>1</ID><Names>Ian,Mark</Names><ID>2</ID><Names>James</Names><ID>3</ID><Names>Karen,Suzie</Names>

小提琴http://sqlfiddle.com/#!6/5f254/13


你必须比较苹果和苹果。 虽然这是事实

select * from #Test for xml path('')

产生的东西看起来像XML(但技术上不是因为它没有根元素),这(你实际上在运行什么)

select ',' + name from #Test for xml path('')

没有。 在我的机器上,它产生了ff字符串:“,Ian,Mark,James,Karen,Suzie”。 从那里,东西函数重击第一个逗号,并获得逗号分隔值列表。

链接地址: http://www.djcxy.com/p/85181.html

上一篇: Why does STUFF remove XML?

下一篇: Dependency Property in F# Default Value does not match