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

Posted xueshu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程里面使用in变量列表异常的处理相关的知识,希望对你有一定的参考价值。

在写一个存储过程的时候,由于需要用到类似: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也可以,看业务具体需求。

 

以上是关于存储过程里面使用in变量列表异常的处理的主要内容,如果未能解决你的问题,请参考以下文章

关于sqlserver中存储过程里面in关键字的使用

MySQL的存储过程

oracle存储过程中循环for in是如何使用的

MySQL数据库编程02

关于oracle存储过程select into 未找到数据问题

java调用oracle存储过程 关于sql里面in函数参数的问题