首先,我不会令大家失望,真想解决问题的认真往下看

很久很久以前,我在使用Server的存储过程时,遇到一个问题,就是,IN(@ids)这样的语句执行不了,其实是可以执行的,很多人提出的解决方案是,EXEC(SQL),但对于像我这样的很多人来说,本来存储过程效率高是因为他预执行了一次(据说是,没验证过),反正SQL Server肯定对他有一定的优化方案。而如果使用EXEC(SQL)相当于还要临时组合一下,最后执行的却是SQL语句而已,所以这种方案,不可行,至少对我来说不可行。

今天又遇到这样的问题,你说我存储过程都写了这么一长段了,我再set 一下,把他们都放''里再改下,那多郁闷,通过分析:既然IN里的内容可以自己写如in(1,2,3)或in('我','是','柳','永法')或是in(select id from tablename)。那就是说,前两种就是我现在遇到的问题,怎么传值进去都不行,那看来只有打最后一种方法的主意了。

就是说,只要in 里能把我传进来的值变成一个类似表的形式就OK了。呵呵,正好前段时间研究了个函数,现在感觉应该能用上。试了下,OK一切搞定,贴上来与大家共享,原作者不知道是谁了,在些谢过。

代码

--From http://www.yongfa365.com/Item/PROCEDURE-IN-SQL-Server.html   
--引用 Select * From Split('1,2,3' , ',')   
--引用 Select * From Split('我,是,www.yongfa365.com' , ',')   
CREATE   FUNCTION [dbo].[Split]   
(   
@c VARCHAR(MAX) ,   
@split VARCHAR(50)   
)   
RETURNS @t TABLE ( col VARCHAR(50) )   
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  

在SQL Server Management Studio里执行这个(我使用的是SQL Server 2005如果是SQL 2000这个函数要改些内容如:VARCHAR(MAX)),会生成一个表值函数,然后使用时呢,比如你想实现:In(@ids)这时可以换成 In(select * from Split(@ids , ','))

这个函数的作用呢,就是把你输入的字符按一定的分隔符分开,并放在一个表里的一列里,然后返回。

OK,存储过程IN参数疑难问题 是不是解决了呢,以后再遇到不用执行那个函数了,只要稍加改造你的存储过程就OK了。

如果你觉得还不够简单或者没看会,建议你直接操作。还是不会,那只能说你不够心静!

stuff函数的解释:

Select stuff("abcdef",2,3,"ghijk")

go

结果:aghijk

stuff的功能:删除指定长度的字符串并在指定的起始点插入另一组字符

STUFF( character_expression ,start ,length ,character_expression )

character_expression :操作的字符,

start:删除和插入的起始点,

length:删除的长度,

character_expression :要插入的字符

-------------------------------------------------------------------------------------------

select patindex('%jinweida%','123jinweida54')

go

结果:4

功能:返回模式在字符串中第一次出现的位置

patindex( '%pattern%' ,expression )

pattern:要查找的模式

expression:被找的字符串

转载于:https://www.cnblogs.com/jhxk/articles/1802707.html

存储过程IN参数疑难问题解决方法【真正解决】相关推荐

  1. Vmware vSphere 十个疑难问题解决方法

    Vmware vSphere疑难问题解决方法 导读:这里汇总了10个Vmware vSphere常见的问题:清除vSphere Client的登录记录.Linux系统VMXNET3虚拟网路卡时UDP包 ...

  2. c#和c++的opencv位图数据参数互换问题解决方法

    1.****************************** C#调用vc++ dll 传递参数的问题(Bitmap 转换为 opencv mat ),保存后图片不一样. vc++ 代码 bool ...

  3. 使用OWC 做图表时按周、月、年设置时间刻度是参数无效问题解决方法

    设置如下时间刻度: ChartAxisGroupingEnum.chAxisGroupingManual;  ChartAxisUnitTypeEnum.chAxisUnitMonth; 需要在Set ...

  4. winbugs Blackbox trap #060问题解决方法

    winbugs Blackbox trap #060问题解决方法 原因 解决办法 参考 原因 出现trap #060一般是因为winbugs运行过程中,需要写文件,而此时文件不可写导致的. 最常出现的 ...

  5. ecshop和Ucenter 通信失败终极解决方法!(附带php5.3以上,出现其他问题解决方法)

    原文地址:http://blog.jing.do/tech-955.html ecshop和Ucenter 通信失败终极解决方法!(附带php5.3以上,出现其他问题解决方法) 2014年06月24日 ...

  6. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数

    js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...

  7. mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法。

    mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法. 参考文章: (1)mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法. (2) ...

  8. Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法

    Node Sass does not yet support your current environment: Windows 64-bit然如何解决,cnpm此问题解决方法 参考文章: (1)No ...

  9. cannot create file怎么解决_内核问题解决方法记录

    内核问题解决方法记录 ♪ 张释文 在内核开发这块,基本工作都是:打补丁,调补丁,调bug.最耗神的就是调bug,调bug的过程最花时间的一步是定位问题,基本上只要定位到问题,解决起来就容易些了(目前我 ...

最新文章

  1. Palo Alto 防火墙升级 Software
  2. 网易有道周枫:AI正带来革命性变化,但在线教育的核心是内容
  3. matlab 绘制三维图并标注每个点的坐标
  4. 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解
  5. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
  6. mysql oracle sqlserver分页,三种常用数据库(Oracle、MySQL、SQLServer)的分页之SQLServer分页...
  7. 构建高可用linux和鸟哥,构建高可用Linux服务器
  8. 雷蛇用户计算机不满足系统要求,我的RazerBook13已经升级Windows11了
  9. Android实现计算器布局(线性布局)
  10. mac os模拟器linux,Mac系统如何启动iOS模拟器 快速启动iOS模拟器教程
  11. O2O营销模式的核心是什么 O2O模式下便利店有哪些特点?
  12. RxSwift-MVVM
  13. 阿里IoT套件 使用记录2 消息转发
  14. 排障集锦:九九八十一难之第十八难!-----System has not been booted with systemd as init system (PID 1). Can‘t operat
  15. matlab图像处理学习笔记
  16. 各种风格登录页响应式html5模板 Admin后台管理系统模板手机wap登录页html模板html会员登录页面模板源码70多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码
  17. 服务器被劫持是什么意思
  18. 用户为什么要使用天翼LIVE?
  19. 写出林俊杰《黑夜问白天》歌词
  20. 向单片机flash中烧录自定义数据的方法

热门文章

  1. MySQL BlackHole 存储引擎使用
  2. linux 下修改最大文件数
  3. 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
  4. Ajax+Node.js前后端交互最佳入门实践(04)
  5. Android应用Push至设备system目录
  6. windows python3.2 shell环境(python叫做解释器)
  7. 配置纯净版Debian
  8. 设计数据层组件并在层间传递数据
  9. win10任务栏库进去计算机,win10电脑始终显示任务栏怎么处理
  10. matlab车辆贪心作业调度,贪心算法-区间调度-Interval Scheduling