declare @t table(id int,c varchar(10))
insert into @t select 1,'张三'
union all select 2,'李四'
union all select 3,'王五'declare @cc varchar(10),@tid intset @cc=''
select @cc=@cc+','+cast(c as varchar(10))
from @t a
where id in (1,2,3)select right(@cc,len(@cc)-1)

解决方案 »

  1.   

    --处理函数
    create function f_qry(
    @str varchar(100)
    )returns varchar(8000)
    as
    begin
    declare @re varchar(8000)
    set @re=''
    select @re=@re+','+name
    from [user]
    where charindex(','+cast(id as varchar)+',',','+@str+',')>0
    return(stuff(@re,1,1,''))
    end
    go--调用
    select dbo.f_qry('1,2,3')
      

  2.   

    DECLARE @IDs VARCHAR(200)
    SET @IDs = '1,2' --注意,逗号分隔DECLARE @sql VARCHAR(8000)
    SET @sql = '
    SELECT *
    FROM 表
    WHERE [ID] IN (' + @IDs + ')
    'PRINT @sql
    EXEC(@sql)
      

  3.   

    思路是基本上是这样:
    declare @s varchar(8000)
    set @s=''
    select @s=@s+','+name from [user] where id in (1,2)
    print right(@s,len(@s)-1)
      

  4.   

    to zjcxc(邹建) 
        我想是我的表达不够准确,我在表2里面的一个字段"gg"的内容就是诸如
    “1,2,3,4,5,...”等等,然后查询得结果时想把它转换成对应的名字 如“张三,李四,王五,...”     “1,2,3,4,5,...”中的数字还是id 号,就在表user里面。
       我试了你给我的方法,查询时得出来的结果的第一个名字显示不出来,且最多显示4个人的名字,我对这方面是个新手,还请帮忙,谢谢!
      

  5.   

    --测试--测试数据
    create table [user](id int,name varchar(10))
    insert [user] select 1,'张三'
    union  all    select 2,'李四'
    union  all    select 3,'王五'
    union  all    select 4,'五四'
    union  all    select 5,'立六'
    union  all    select 6,'工七'
    union  all    select 7,'我八'
    go--处理函数
    create function f_qry(
    @str varchar(100)
    )returns varchar(8000)
    as
    begin
    declare @re varchar(8000)
    set @re=''
    select @re=@re+','+name
    from [user]
    where charindex(','+cast(id as varchar)+',',','+@str+',')>0
    return(stuff(@re,1,1,''))
    end
    go--调用
    select dbo.f_qry('1,2,3')
    select dbo.f_qry('1,2,3,5,6,7')
    go--删除测试
    drop table [user]
    drop function f_qry/*--测试结果:---------------------------------
    张三,李四,王五(所影响的行数为 1 行)
    ---------------------------------
    张三,李四,王五,立六,工七,我八(所影响的行数为 1 行)
    --*/
      

  6.   

    create function f_qry(
    @str varchar(100)
    )returns varchar(8000)
    as
    begin
    declare @re varchar(8000)
    set @re=''
    select @re=@re+','+rtrim(name)  --如果你的name是char/nchar类型
    from [user]
    where charindex(','+cast(id as varchar)+',',','+@str+',')>0
    return(stuff(@re,1,1,''))
    end
    go
      

  7.   

    --修正一下排序问题--处理函数
    create function f_qry(
    @str varchar(100)
    )returns varchar(8000)
    as
    begin
    declare @re varchar(8000)
    set @re=''
    while charindex(',',@str)>0
    begin
    select @re=@re+','+ltrim(rtrim(name))
    from [user]
    where id=left(@str,charindex(',',@str)-1)
    set @str=right(@str,len(@str)-charindex(',',@str))
    end
    select @re=@re+','+ltrim(rtrim(name)) 
    from [user] 
    where id=cast(@str as int) return(stuff(@re,1,1,''))
    end
    go--调用
    select dbo.f_qry('1,2,3')
    select dbo.f_qry('1,3,2')
    go--返回
    (所影响的行数为 7 行)
          
    ---------------
    张三,李四,王五(所影响的行数为 1 行)
          
    ---------------
    张三,王五,李四(所影响的行数为 1 行)
      

  8.   

    多谢楼上几位!!
       在调用语句这里用 select dbo.f_qry('1,2,3')确实都行,
    但我的意思是用列名也就是字段名比如“gg”来表示,如何写呢?(不要笑我问得太菜,因为我本身就很菜,向各位学习!)    
         
      

  9.   

    select dbo.f_qry(gg)  from 表
      

  10.   

    name列的内容 既有中文名字,又有纯数字的name用 nvarchar 这个类型可以吧?
      

  11.   

    to zjcxc(邹建) 
     我用的就是这个,也就是出现了第一行没有,多于四个就显示不出来的问题?