declare @var1 varchar(100)
select @var1 = @var1+ ',' + Col1Nam from Table 
set @var1 = stuff(@var1,1,1,'')
select @var1 

解决方案 »

  1.   

    用楼下说的游标的方式我已经实现了,
    不过
    MorningTea(一勺抹茶) 你提供的方法:
    select @var1 = @var1+ ',' + Col1Nam from Table 
    好像会给@var1赋一个空值吧
    上面那句话应该先算@var1+','+col1nam 的合并字符串后执行 select语句,那这样
    返回的行肯定是空的啊,因为表中没有这个字段啊?不知道对不对?
      

  2.   

    非常抱歉,有点失误,我说的这个只是全部串起来有用
    create table #s (xx varchar(30))
    insert into #s values('Catherine Zita-Jones')
    insert into #s values('Judu Foster')
    insert into #s values('Will Smith')
    select * from #s
    /*
    xx                             
    ------------------------------ 
    Catherine Zita-Jones
    Judu Foster
    Will Smith(3 row(s) affected)
    */declare @var1 varchar(100)
    set @var1 =''
    select @var1 = @var1 + ',' + xx from #s 
    set @var1 = stuff(@var1,1,1,'')
    select @var1 /*                                                                                       
    ----------------------------------------------
    Catherine Zita-Jones,Judu Foster,Will Smith(1 row(s) affected)
    */我前面取到为null,因为之前我没有赋值,
    declare @var1 varchar(100)
    set @var1 = ''--要加上这句,否则@var1 的初始值为null,那么和其他值运算都为null,所以就是错--误答案,sorry!
    select @var1 = @var1+ ',' + Col1Nam from Table 
    如果不是串在一起,请参考
    http://community.csdn.net/Expert/topic/4186/4186501.xml?temp=.8284265
    问问题的作者就给了很好的函数,呵呵
      

  3.   

    如果像楼上说的,用一个UDF来实现行列转化,也是一种方法。
    不过,如果用户要提取相关字段来用的话,你还要进行一下字符串切分。
    再者,该字段可能内容可能含有逗号。(所以你还是用一些基本没人用的分隔符吧。例如:○○○等)
    最后,如果串联出的结果超过8192的字符的话,你那个变量是放不下的。(而且这种情况,在表中的数据上百条时,就很有可能出现)总的来说,如果还是用游标好一点。