解决 Select * from TableName where ID in (@ids) 问题

  有这样一个问题:

     在Sql Server 2005 中有学生表,结构如下

      students(

       id int ,

       name varchar(100)

        )

  问题:查询出ID 等于 1,2,3,4,5 的学生

按照我的传统方法是,在类库中构造SQL语句,调用ADO.NET执行查询操作。这种方法是可以查询出所要的结构。但是之前的存储过程中也遇到过这样的问题。SQL语句如下,

  declare @ids varchar(100)

  set @ids='1,2,3,4,5';

  select * from students where id in (@ids)

  错误提示:在将''1,2,3,4,5'转换成数据类型 int 时 失败

     后来在网上搜索,巧妙的运用charindex方法解决传递字符串的问题。

   这里给出个解决方法。

  declare @ids varchar(100)

  set @ids='1,2,3,4,5';

  select * from students where charindex(','+cast(id as varchar)+',' , ','+@ids+',')>0

  这种方法的执行效率没有研究过。但是很巧妙的解决了这个问题。

  charindex的使用 请看博文:http://www.cnblogs.com/yoolonet/archive/2010/11/25/1887868.html

posted @ 2010-12-08 20:41  yoolo wu  阅读(2609)  评论(0)    收藏  举报