在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传入带逗号值的参数,都能正确得出结果了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM