直接上SQL
select stuff((
select ','+CAST([Id] as varchar)
from EventLog
for XML Path('Logs'),Type).value('.','varchar(max)'),1,1,'')
1,2,3,4,5,6,7,8,9,10,11,12,13,14
上面的SQL中 EventLog是一个Table,[Id]是其中一个字段名。
select 子句作用是用逗号连接每一个查询出来的[Id],for XML Path('') 子句是将查询结晒输出为XML,Type 的作用是使输出的内容为XML DOM,这就可以使用点运算符调用value()函数,将XML中的”值“提取,并使用逗号连接起来。
外层的Select子句,使用Stuff函数,将从下标为1,长度为1的字符去掉,并使用一个空白字符代替。
查询结果的顺序:
A
select ','+CAST([Id] as varchar)
from EventLog
for XML Path('Logs'),Type
<Logs>,1</Logs>
<Logs>,2</Logs>
<Logs>,3</Logs>
<Logs>,4</Logs>
<Logs>,5</Logs>
<Logs>,6</Logs>
<Logs>,7</Logs>
<Logs>,8</Logs>
<Logs>,9</Logs>
<Logs>,10</Logs>
<Logs>,11</Logs>
<Logs>,12</Logs>
<Logs>,13</Logs>
<Logs>,14</Logs>
B:
select (
select ','+CAST([Id] as varchar)
from EventLog
for XML Path('Logs'),Type).value('.','varchar(max)')
,1,2,3,4,5,6,7,8,9,10,11,12,13,14
C:
select stuff((
select ','+CAST([Id] as varchar)
from EventLog
for XML Path('Logs'),Type).value('.','varchar(max)'),1,1,'')
1,2,3,4,5,6,7,8,9,10,11,12,13,14
如果不好理解可以自行查询MSDN及建一个表测试一下。
Stuff函数参考: