在存储过程中如何实现将ID列表字符串传入IN()
我们在平常编写sql语句时,经常碰到要把id列表字符串(比如:'001,002,003,....')当做参数传递给存储过程,
那么在存储过程中要用in作为条件进行记录的过滤,那么采用in(@idList),其中@idList如'001,002,003,....'。这样执行存储过程就会出错,显然这种传递方法是不可行的(除非@idList只有一个id如'001'),
今天晚上和导师尝试了很多中办法,还是没解决。在不断的讨论中,突然有个灵感:就是采用临时表,
把这些id一个一个存在临时表中(这个需要点技巧,后面给出代码),然后这样调用in:in(select id from #tbIdList)
,其中#tbIdList 为保存了id的临时表。
CREATE TABLE #tbUserId(userID int)
DECLARE @userID varchar(20)
WHILE(charindex(',',@Key) >0)
BEGIN
SET @userID = substring(@Key,0,charindex(',',@Key))
SET @Key = substring(@Key,charindex(',',@Key)+1,len(@Key))
INSERT INTO #tbUserId(userID) VALUES(@userID)
END
INSERT INTO #tbUserId(userID) VALUES(@Key)
例子:@Key='0001,0002,0003'
调用:SELECT * FROM tbUser WHERE userID IN (SELECT userID FROM #tbUserId)
后来有同事问我效率怎样? 我去查了一下in的效率,发现建议使用exists不使用in,而上面的语句系统会自动转换为
Exists(Select * from #tbUserId where tbUser.userID = userID),所以效率是没问题的。
可是如果IN后面查询语句涉及到多个条件且和外表相关时此时采用Exists效率更好。
http://www.cnblogs.com/zhangchenliang/archive/2010/01/10/1643584.html
转载于:https://www.cnblogs.com/sjaroom/p/3199820.html
在存储过程中如何实现将ID列表字符串传入IN()相关推荐
- 达梦数据库迁移oracle数据乱码,oracle迁移到达梦数据库之存储过程中char类型的不同处理...
oracle迁移到dm之存储过程中char类型的不同处理 1.问题描述: oracle迁移到dm后,oracle正常使用的存储过程,在dm中使用报错:字符串截断 2.查找原因: 2.1 对比oracl ...
- mysql存储过程的正确描述_MySQL存储过程中的基本函数描述
以下的文章主要介绍的是MySQL存储过程中的基本函数即,对字符串类与MySQL数据库存储过程基本函数中的数学类的介绍,以下就是具体内容的描述,希望在你今后的学习中会对其有所帮助. 一.字符串类 CHA ...
- python中异或运算_python – 基于ID列表有效计算XOR(^)校验和的方法
当谷歌搜索有关 Python列表理解的信息时,我获得了一个google foobar挑战,我在过去的几天里一直在慢慢地工作以获得乐趣.最新挑战: 有效地要求生成ID列表,忽略每个新行的增加数字,直到剩 ...
- 页面中php传值后循环列表js获取点击的id
页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...
- mybatis根据id批量更新mysql_MyBatis中的IN操作,根据ID列表批量更新
MyBatis中的IN操作 在写更新语句的时候,我们会遇到这样的业务 根据所选中的学生更新他的分数 举个栗子: UPDATE student SET score = 60 WHERE sid IN ( ...
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?
我们可以使用游标来处理存储过程中的结果集.基本上,游标允许我们迭代查询返回的一组行并相应地处理每一行. 为了演示在MySQL存储过程中CURSOR的用法,我们基于以下名为" student_ ...
- Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:
摘要:之前在项目中使用到了Oracle数据库中通过触发器去调用存储过程执行数据解析并Update到对应的数据表中,但是,经过一段时间的测试使用发现,如果job那天停掉了,然后你再重新新建job的话,这 ...
- 在存储过程中构建动态SQL
目录 介绍 sp_executesql与EXECUTE命令 例1.0 例1.1 存储过程中的动态SQL 例2.0 在动态SQL中使用Like操作符,IN操作符和Order By 例3.0 - 使用LI ...
最新文章
- linux change linux login shell
- tableau应用实战案例(三)-如何用Tableau制作网络关系图
- macbook怎么改编码_如何设置新的MacBook进行编码
- vue 项目常见功能(搜索 时间戳转换 过滤器)
- java中String的七种用法
- Mysql 自动增长 重置
- mapreduce实现矩阵相乘
- Quartz在QRTZ_JOB_DETAILS表中存储了什么
- 试验解析抖音无水印视频【PHP版】
- C# 数字转汉字(一二三)
- Java入门概念回炉重造
- 硬盘坏了数据可以恢复吗?
- qq三国单刀赴会服务器找不到,单刀赴会,收武器装备“图纸”,70-120等级,130级按套收,......
- 阿里云AMD服务器计算型c6a和通用型g6a实例性能参数详解
- 飞扬的小鸟1.0测试版
- Python爬虫之模拟登录豆瓣获取最近看过的电影
- Uva 12627 Erratic Expansion
- 秘密潜入1-普通枪械射速修改-Python源码
- 搭建邮件服务器 提示554 DT:SPM 163
- 宿主FL Studio水果音乐制作Daw20.9
热门文章
- 交换排序图解_图解简单选择排序
- 税友报税软件让修改服务器地址,税友报税软件让修改服务器地址
- 服务器主机防御系统,主机入侵防御系统
- 5m 云服务器2核4g_华为云服务器2核4G 5M 248一年
- php一个数组赋值给对象,php数组与对象相互转换方法
- java debugtrace_Debug与Trace的区别
- java中的pattern_Java Pattern的用法是什么?
- oracle发送邮件附件,oracle发送邮件存储过程:
- 力扣(LeetCode)刷题,简单题(第9期)
- 三维空间平面拟合MATLAB