我从SQL2008库中查询出下面的结果用户编号 用户名称
A001 张三
A002 李四
A003 王五这个查询结果是个二维表,实际可能有上百行数据,能不能将这些数据串成一个字符串,如下:
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>目的是将其串起来,更新SQL2008库中某一个特定的字段,希望能直接在SQL执行,而不是用程序来完成!
A001 张三
A002 李四
A003 王五这个查询结果是个二维表,实际可能有上百行数据,能不能将这些数据串成一个字符串,如下:
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>目的是将其串起来,更新SQL2008库中某一个特定的字段,希望能直接在SQL执行,而不是用程序来完成!
数据源
a
b
c
d
e
结果
a,b,c,d,e
*/create table tb(col varchar(20))
insert tb values ('a')
insert tb values ('b')
insert tb values ('c')
insert tb values ('d')
insert tb values ('e')
go--方法一
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + t.col + ',' from (select col from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)
/*
result
----------
a,b,c,d,e,
*/--方法二
declare @output varchar(8000)
select @output = coalesce(@output + ',' , '') + col from tb
print @output
/*
a,b,c,d,e
*/drop table tb
declare @sql varchar(1000)
set @sql = ''
select @sql = @sql + '<ID=' + t.用户编号 + ' name=' + t.用户名称 + '>' from (select * from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + ''''
exec(@sql)
-- 2005 的XML可能有更好的方法--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (用户编号 varchar(4),用户名称 varchar(4))
insert into #tb
select 'A001','张三' union all
select 'A002','李四' union all
select 'A003','王五'declare @s varchar(4000)
select @s=isnull(@s+'<ID=','<ID=')+用户编号+' '+'name='+用户名称+'>' from #tb
select @s
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>(1 行受影响)
insert into tb values('A001', '张三')
insert into tb values('A002', '李四')
insert into tb values('A003', '王五')
godeclare @sql varchar(1000)
set @sql = ''
select @sql = @sql + '<ID=' + t.用户编号 + ' name=' + t.用户名称 + '>' from (select * from tb) as t
set @sql='select result = ''' + left(@sql , len(@sql) - 1) + '>'''
exec(@sql)drop table tb/*
result
---------------------------------------------------------
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>
*/
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
用户编号 char(5),
用户名称 char(5)
)
go
--插入测试数据
insert into tb select 'A001','张三'
union all select 'A002','李四'
union all select 'A003','王五'
go
--代码实现select result=replace(replace((select '<ID='+rtrim(用户编号)+' name='+rtrim(用户名称)+'>' from tb for xml path('')),'<','<'),'>','>')/*测试结果result
---------------------------------------------------------------
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>(1 行受影响)
*/