在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
2024-08-21 19:58:41
最近在一项目修改中,要在存储过程中给in参数传值,语句写的也对,但怎么执行都得不出结果,如果把这语句直接赋值、执行,却能得出结果,很是奇怪,如:
直接执行select schoolname from school_info where code in('01','02'),是可以得出结果的,但在存储过程中,使用
declare @area varchar(120);
set @area='01'+','+'02';
select schoolname from school_info where code in(@area),却得不出去结果。
set @area='01'+','+'02';
select schoolname from school_info where code in(@area),却得不出去结果。
想着可能是@area赋值的写法有问题,但试过多种办法都不行。尝试着用组成动态sql语句, 用exec执行的方法,是没有问题,能得出结果的,但总感觉这样有点怪怪的,不是想要的理想中解决办法。
后来终于在网上找一个解决办法,测试后,没有问题,用着很方便。就是建一个函数,建好后,列在函数的表值函数下面,语句如下:
create function [dbo].[f_split](@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),'') end insert @t(col) values (@c) return end
然后使用的时候呢,语句如下:
select schoolname from school_info where code in(select col from [dbo].[f_split](@area,','))
这样再执行存储过程,给in传入带逗号值的参数,都能正确得出结果了。
最新文章
- HK&;&;CC JS学习:第一周——NO.2this
- 面试题整理:C#(二)
- QQ提醒的功能
- OpenCV的基本数据结构
- Dynamic view
- js实现的侧边栏展开收缩效果
- angular cors跨域资源共享设置 和formdata设定
- 一道java基础面试题
- Metaclasses
- Linux基础入门-文件打包与解压缩
- 8、zabbix监控方式及分布式监控(04)
- 逆向知识之CS辅助/外挂专题.2.实现CS1.6透视原理
- mysql ON DUPLICATE KEY UPDATE ; 以及 同replace to 的区别.
- tkinter简单使用
- SQL 时间戳转换为日期
- Java Queue的测试
- 根据sys.database_mirroring查询镜像数据库同步状态
- cp的使用
- 第20章—跨域访问(CORS)
- Python+Selenium-BDD框架之behave
热门文章
- js传递参数中包含+号时的处理方法
- JAVA_Java中关于supper和this的理解
- 对ASP.NET运行机制之 一般处理程序ashx的学习
- Drools给日志打标签
- [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
- 利用jQuery和Ajax实现检测用户名是否已经被注册
- finder的隐藏文件&;IOS虚拟机地址
- 黑马程序员_ JAVA中的多线程
- Dynamics Webservice Call with Credential
- React 附件动画API ReactCSSTransitionGroup