在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
2016-08-23 09:30
288 查看
近在一项目修改中,要在存储过程中给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),却得不出去结果。
想着可能是@area赋值的写法有问题,但试过多种办法都不行。尝试着用组成动态sql语句, 用exec执行的方法,是没有问题,能得出结果的,但总感觉这样有点怪怪的,不是想要的理想中解决办法。
后来终于在网上找一个解决办法,测试后,没有问题,用着很方便。就是建一个函数,建好后,列在函数的表值函数下面,语句如下:
然后使用的时候呢,语句如下:
select schoolname from school_info where code in(select col from [dbo].[f_split](@area,','))
这样再执行存储过程,给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),却得不出去结果。
想着可能是@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传入带逗号值的参数,都能正确得出结果了
相关文章推荐
- 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
- 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
- 在存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
- MYSQL存储过程实现in传入参数 where in('1','2')
- update 表名 set 某列名=now() where user in('user1','user2','user3');
- 存储过程使用逗号分隔作为IN参数疑难问题解决方法【真正解决】
- MySQL 存储过程传参数问题:实现 where id in(1,2,3,...)
- 详解MySQL存储过程参数有三种类型(in、out、inout)
- MySQL 存储过程参数用法 in, out, inout
- 存储过程参数 用到in
- MySQL 存储过程传参数问题:实现 where id in(1,2,3,...)
- sqlserver 存储过程动态参数调用实现代码
- 详解MySQL存储过程参数有三种类型(in、out、inout)
- C#读取SqlServer存储过程及参数《转》
- 在存储过程中从结果集给多个参数赋值的小办法
- 存储过程接收多个值(用分隔符号的字符串参数)的用in查询
- oracle调用带in out参数的存储过程
- 存储过程中IN 参数的使用
- SQLSERVER 存储过程调用存储过程,如何得到输出参数
- SQL Server 2005 存储过程不支持数组类型参数的变通办法