在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的

最近在一项目修改中,要在存储过程中给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传入带逗号值的参数,都能正确得出结果了。


转载:http://www.cnblogs.com/chendaoyin/p/3682625.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值