您的位置:首页 > 其它

存储过程里面使用in变量列表异常的处理

2016-09-09 13:32 337 查看
在写一个存储过程的时候,由于需要用到类似:select id,name from tablename where id in(id1,id2,id3...)的查询语句,同时括号里面的变量是拼接得到的,当时没有多想,直接将存储过程写成类似select id,name from tablename where id in(@idStr),然后传入拼接后的id进去。果然就报错了:



然后分析了一下,id列是int类型的,但是传入的是varchar类型,应该是编译执行的时候,将@idStr当做一个变量使用,由于id是int类型,所以直接转为int类型,就报错了。

于是就换了一种方法,存储过程类似如下:

DECLARE @sql VARCHAR(MAX)

set @sql='select id,name from tablename where id in('+@idStr+')'

exec (@sql)

问题解决,所以说,如果用到类似需要传入一个变量列表的话,还是先拼接SQL,然后再执行。当然,改为一次只传入一个id也可以,看业务具体需求。

有其它更好的办法,我确定,但是懒得动脑筋想别的办法,因此就这么用着先。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: