存储过程IN参数疑难问题解决方法【真正解决】
很久很久以前,我在使用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一切搞定,贴上来与大家共享,原作者不知道是谁了,在些谢过。
--引用 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参数疑难问题解决方法【真正解决】相关推荐
- Vmware vSphere 十个疑难问题解决方法
Vmware vSphere疑难问题解决方法 导读:这里汇总了10个Vmware vSphere常见的问题:清除vSphere Client的登录记录.Linux系统VMXNET3虚拟网路卡时UDP包 ...
- c#和c++的opencv位图数据参数互换问题解决方法
1.****************************** C#调用vc++ dll 传递参数的问题(Bitmap 转换为 opencv mat ),保存后图片不一样. vc++ 代码 bool ...
- 使用OWC 做图表时按周、月、年设置时间刻度是参数无效问题解决方法
设置如下时间刻度: ChartAxisGroupingEnum.chAxisGroupingManual; ChartAxisUnitTypeEnum.chAxisUnitMonth; 需要在Set ...
- winbugs Blackbox trap #060问题解决方法
winbugs Blackbox trap #060问题解决方法 原因 解决办法 参考 原因 出现trap #060一般是因为winbugs运行过程中,需要写文件,而此时文件不可写导致的. 最常出现的 ...
- ecshop和Ucenter 通信失败终极解决方法!(附带php5.3以上,出现其他问题解决方法)
原文地址:http://blog.jing.do/tech-955.html ecshop和Ucenter 通信失败终极解决方法!(附带php5.3以上,出现其他问题解决方法) 2014年06月24日 ...
- js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 参考文章: (1)js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数 (2)https://www.cnblogs.co ...
- mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法。
mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法. 参考文章: (1)mysql数据库出现无法登录(ERROR 1045 ),预防和解决及系列问题解决方法. (2) ...
- 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 ...
- cannot create file怎么解决_内核问题解决方法记录
内核问题解决方法记录 ♪ 张释文 在内核开发这块,基本工作都是:打补丁,调补丁,调bug.最耗神的就是调bug,调bug的过程最花时间的一步是定位问题,基本上只要定位到问题,解决起来就容易些了(目前我 ...
最新文章
- Palo Alto 防火墙升级 Software
- 网易有道周枫:AI正带来革命性变化,但在线教育的核心是内容
- matlab 绘制三维图并标注每个点的坐标
- 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解
- aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍
- mysql oracle sqlserver分页,三种常用数据库(Oracle、MySQL、SQLServer)的分页之SQLServer分页...
- 构建高可用linux和鸟哥,构建高可用Linux服务器
- 雷蛇用户计算机不满足系统要求,我的RazerBook13已经升级Windows11了
- Android实现计算器布局(线性布局)
- mac os模拟器linux,Mac系统如何启动iOS模拟器 快速启动iOS模拟器教程
- O2O营销模式的核心是什么 O2O模式下便利店有哪些特点?
- RxSwift-MVVM
- 阿里IoT套件 使用记录2 消息转发
- 排障集锦:九九八十一难之第十八难!-----System has not been booted with systemd as init system (PID 1). Can‘t operat
- matlab图像处理学习笔记
- 各种风格登录页响应式html5模板 Admin后台管理系统模板手机wap登录页html模板html会员登录页面模板源码70多套高大尚响应式网站模板html5网页静态模板Bootstrap扁平化网站源码
- 服务器被劫持是什么意思
- 用户为什么要使用天翼LIVE?
- 写出林俊杰《黑夜问白天》歌词
- 向单片机flash中烧录自定义数据的方法
热门文章
- MySQL BlackHole 存储引擎使用
- linux 下修改最大文件数
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
- Ajax+Node.js前后端交互最佳入门实践(04)
- Android应用Push至设备system目录
- windows python3.2 shell环境(python叫做解释器)
- 配置纯净版Debian
- 设计数据层组件并在层间传递数据
- win10任务栏库进去计算机,win10电脑始终显示任务栏怎么处理
- matlab车辆贪心作业调度,贪心算法-区间调度-Interval Scheduling