如题,
例如有表a如下:
id            name            age
--            ----            ---
1             zhangsan        23
2             lisi            40
3             wangwu          30要求利用sql语句将id列的值连接成字符创并放在变量里,变量如下:
declare @res varchar(30);
结果类似:'1,2,3'在网上找了一些都没有达到效果,特来请教

解决方案 »

  1.   

    本帖最后由 josy 于 2010-08-02 12:05:27 编辑
      

  2.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([id] int,[name] varchar(8),[age] int)
    insert [tb]
    select 1,'zhangsan',23 union all
    select 2,'lisi',40 union all
    select 3,'wangwu',30
     
    ---查询---
    declare @res varchar(30);
    select @res=isnull(@res+',','')+ltrim(id) from tb
    select @res---结果---------------------------------
    1,2,3(1 行受影响)
      

  3.   

    我原来查到的是用这样的语句:
    select @res=@res+','+ltrim(id) from prm_tb
    这样的话没有效果,变量里是NULL
    帮助里关于isnull()的解释是:
    “如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。”
    那么isnull(@res+',','')中的@res+','表达式岂不是永远都不会为NULL?
      

  4.   

    isnull(@res,'') 即如果@res为空,则赋一个空值给它。
    事实上,也可以这样declare @res varchar(30);
    set @res=''
    select @res=','+ltrim(id) from tb
    select stuff(@res,1,1,'') --去掉前面的,号
      

  5.   


    这里的空值,指的是空字符串'',而非null
      

  6.   

    @res
     因为你这个变量没有给它赋初值,所以他是NULL,他加任何值都是NULL。
    所以你要用isnull()替换到@res 为NULL的情况