比如数据表如下:
tablesid(int)    name(varchar)
1            jack
2            lousi
3            mike
4            fuck
5            suck
6            dick
7            read
8            nancy


比如我想选取id为1 2 5 7 8 9 这几条记录
@selectid varchar(1000)
@selectid = ‘1,2,5,7,8,9’
select name from tables where id in(@selectid)
这样子会报错数据类型无法转换
我该改成什么样子才能使这条语句正确?

解决方案 »

  1.   

    select name from tables where charindex(','+id+',',','+ @selectid+',')>0
      

  2.   

    declare @T_ID table
    (
    ID int
    )
    insert into @T_ID values
    (1),
    (2),
    (5),
    (7),
    (8),
    (9)select name from tables where id in(select ID from @T_ID)
      

  3.   

    charindex 函数要求的参数类型是varchar的 而id是int类型的,参数无效
      

  4.   

    那就转为varcharselect name from tables where charindex(','+ltrim(id)+',',','+ @selectid+',')>0
      

  5.   


    这个ltrim函数的参数类型不也是varchar的吗?还不是一样参数错误
      

  6.   


    试了一下 这个ltrim把id放进去不会说参数不正确,但是charindex确会说,真是奇怪了
    两个都是用varchar类型的参数的,一个能用int一个不能,搞得那么麻烦
    不过谢谢你了 问题解决了
      

  7.   


    转换一下
    cast(id as varchar(n))