SQL语句如下:
SELECT * FROM t_posting WHERE  c_category_id in(@categoryid).cs文件里了取得了
@categoryid="1,2,3,4,5"为什么显示不出任何记录,而我如果写成SELECT * FROM t_posting WHERE  c_category_id in(1,2,3,4,5)
就可以显示记录啊?是不是和@categoryid类型有关啊?
我应该怎么办呢?

解决方案 »

  1.   

    它把你的 "1,2,3,4,5" 当成一个字符串了也就是说:SELECT * FROM t_posting WHERE  c_category_id in( '1,2,3,4,5' )而不是SELECT * FROM t_posting WHERE  c_category_id in(1,2,3,4,5)
      

  2.   

    这样不行,要这样string categoryid = "1,2,3,4,5";
    string strSql = "SELECT * FROM t_posting WHERE  c_category_id in(" + categoryid + ")";
      

  3.   

    你可以把这个sql语句拼成一个字符串,然后执行这个字符串,就可了比如:declare @sql as varchar(500);
    set @sql = '';set @sql = 'SELECT * FROM t_posting WHERE  c_category_id in(' +  @categoryid + ')'exec (@sql)
      

  4.   

    同意一楼,如果可以代码实现话,二楼可以实现,如果是存储过程呢,建议改写成
    SELECT * FROM t_posting WHERE  c_category_id in(1,2,3,4,5)
    或带多个参数的存储过程
      

  5.   

    declare @str varchar(100),@sql varchar(500)
    set @str='1,2,3,4'set @Sql = 'SELECT * FROM t_posting WHERE  c_category_id in ('+@str+')'
    print(@sql)
      

  6.   

    嗯。同意一楼兄台的作法。
    应该将sql语句也赋至一个string变量里,然后再跟参数进行拼凑。这样才能得到你要的结果。
      

  7.   

    把这个sql语句拼成一个字符串,然后执行这个字符串,就可了比如:declare @sql as varchar(500);
    set @sql = '';set @sql = 'SELECT * FROM t_posting WHERE  c_category_id in(' +  @categoryid + ')'exec (@sql)
      

  8.   

    如果你是一个存储过程,不能再程序里拼字符串,
    可以写一个用户表值函数fsplit,功能是输入字符串,和分隔符,
    返回一个table,里面是将输入字符窜用分隔符分隔成的一元素集
    也就是输入"1,2,3,4,5","," 返回一列五行,每行非别为1 2 3 4 5
    然后你用
    SELECT * FROM t_posting WHERE  c_category_id in( select * from fsplit(@categoryid,','))
    就可以得到正确的结果了。ALTER function dbo.fsplit
    (
    @str varchar(4000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @re table(istr varchar(1000))
    as
    begin
    declare @i int,@splen int
    select @splen=len(@spli)
    ,@i=charindex(@spli,@str)
    while @i>0
    begin
    insert into @re values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    ,@i=charindex(@spli,@str)
    end
    if @str<>'' insert into @re values(@str)
    return
    end