存储过程里面使用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也可以,看业务具体需求。
有其它更好的办法,我确定,但是懒得动脑筋想别的办法,因此就这么用着先。
然后分析了一下,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也可以,看业务具体需求。
有其它更好的办法,我确定,但是懒得动脑筋想别的办法,因此就这么用着先。
相关文章推荐
- windows cwrsync 安装配置
- Java线程池使用说明
- React-Native自定义view的缩放问题
- Android:自定义Toast
- 本地登录判断加数据传递
- 4K摄像机
- stack corruption,segmentation fault和bus error<core dump>错误分析
- redis的配置详解
- SQLite增加字段
- 在Java filter中调用service层方法
- 元素移除
- 请求转发
- unexpected inconstancy
- H5调用手机的摄像头拍照上传以及手机相册选取照片
- android 的activity中addContentView 和 setContentView 的区别
- Storm DRPC
- C语言实现字符串中的单词的逆转
- MyEclipse常用快捷键及快捷键大全
- Selenium+TestNG Web自动化测试环境搭建5_高亮对象
- socket网络编程基础