我从SQL2008库中查询出下面的结果用户编号     用户名称
 A001         张三
 A002         李四
 A003         王五这个查询结果是个二维表,实际可能有上百行数据,能不能将这些数据串成一个字符串,如下:
<ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>目的是将其串起来,更新SQL2008库中某一个特定的字段,希望能直接在SQL执行,而不是用程序来完成!

解决方案 »

  1.   

    /*如何将一列中所有的值一行显示
    数据源
      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
      

  2.   

    --方法一
    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)
      

  3.   


    -- 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 行受影响)
      

  4.   

    create table tb(用户编号 varchar(10),用户名称 varchar(10))
    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=王五>
    */
      

  5.   

    use test
    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('')),'&lt;','<'),'&gt;','>')/*测试结果result
    ---------------------------------------------------------------
    <ID=A001 name=张三><ID=A002 name=李四><ID=A003 name=王五>(1 行受影响)
    */