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

最新文章

  1. HK&amp;&amp;CC JS学习:第一周——NO.2this
  2. 面试题整理:C#(二)
  3. QQ提醒的功能
  4. OpenCV的基本数据结构
  5. Dynamic view
  6. js实现的侧边栏展开收缩效果
  7. angular cors跨域资源共享设置 和formdata设定
  8. 一道java基础面试题
  9. Metaclasses
  10. Linux基础入门-文件打包与解压缩
  11. 8、zabbix监控方式及分布式监控(04)
  12. 逆向知识之CS辅助/外挂专题.2.实现CS1.6透视原理
  13. mysql ON DUPLICATE KEY UPDATE ; 以及 同replace to 的区别.
  14. tkinter简单使用
  15. SQL 时间戳转换为日期
  16. Java Queue的测试
  17. 根据sys.database_mirroring查询镜像数据库同步状态
  18. cp的使用
  19. 第20章—跨域访问(CORS)
  20. Python+Selenium-BDD框架之behave

热门文章

  1. js传递参数中包含+号时的处理方法
  2. JAVA_Java中关于supper和this的理解
  3. 对ASP.NET运行机制之 一般处理程序ashx的学习
  4. Drools给日志打标签
  5. [ActionScript 3.0] AS3.0将图像的Alpha通道转换为黑白图像(复制通道方式)
  6. 利用jQuery和Ajax实现检测用户名是否已经被注册
  7. finder的隐藏文件&amp;IOS虚拟机地址
  8. 黑马程序员_ JAVA中的多线程
  9. Dynamics Webservice Call with Credential
  10. React 附件动画API ReactCSSTransitionGroup