我们在平常编写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()相关推荐

  1. 达梦数据库迁移oracle数据乱码,oracle迁移到达梦数据库之存储过程中char类型的不同处理...

    oracle迁移到dm之存储过程中char类型的不同处理 1.问题描述: oracle迁移到dm后,oracle正常使用的存储过程,在dm中使用报错:字符串截断 2.查找原因: 2.1 对比oracl ...

  2. mysql存储过程的正确描述_MySQL存储过程中的基本函数描述

    以下的文章主要介绍的是MySQL存储过程中的基本函数即,对字符串类与MySQL数据库存储过程基本函数中的数学类的介绍,以下就是具体内容的描述,希望在你今后的学习中会对其有所帮助. 一.字符串类 CHA ...

  3. python中异或运算_python – 基于ID列表有效计算XOR(^)校验和的方法

    当谷歌搜索有关 Python列表理解的信息时,我获得了一个google foobar挑战,我在过去的几天里一直在慢慢地工作以获得乐趣.最新挑战: 有效地要求生成ID列表,忽略每个新行的增加数字,直到剩 ...

  4. 页面中php传值后循环列表js获取点击的id

    页面中php传值后循环列表js获取点击的id值进行js操作 <script type="text/javascript" src="__PUBLIC__/js/jq ...

  5. mybatis根据id批量更新mysql_MyBatis中的IN操作,根据ID列表批量更新

    MyBatis中的IN操作 在写更新语句的时候,我们会遇到这样的业务 根据所选中的学生更新他的分数 举个栗子: UPDATE student SET score = 60 WHERE sid IN ( ...

  6. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  7. mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?

    我们可以使用游标来处理存储过程中的结果集.基本上,游标允许我们迭代查询返回的一组行并相应地处理每一行. 为了演示在MySQL存储过程中CURSOR的用法,我们基于以下名为" student_ ...

  8. Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:

    摘要:之前在项目中使用到了Oracle数据库中通过触发器去调用存储过程执行数据解析并Update到对应的数据表中,但是,经过一段时间的测试使用发现,如果job那天停掉了,然后你再重新新建job的话,这 ...

  9. 在存储过程中构建动态SQL

    目录 介绍 sp_executesql与EXECUTE命令 例1.0 例1.1 存储过程中的动态SQL 例2.0 在动态SQL中使用Like操作符,IN操作符和Order By 例3.0 - 使用LI ...

最新文章

  1. linux change linux login shell
  2. tableau应用实战案例(三)-如何用Tableau制作网络关系图
  3. macbook怎么改编码_如何设置新的MacBook进行编码
  4. vue 项目常见功能(搜索 时间戳转换 过滤器)
  5. java中String的七种用法
  6. Mysql 自动增长 重置
  7. mapreduce实现矩阵相乘
  8. Quartz在QRTZ_JOB_DETAILS表中存储了什么
  9. 试验解析抖音无水印视频【PHP版】
  10. C# 数字转汉字(一二三)
  11. Java入门概念回炉重造
  12. 硬盘坏了数据可以恢复吗?
  13. qq三国单刀赴会服务器找不到,单刀赴会,收武器装备“图纸”,70-120等级,130级按套收,......
  14. 阿里云AMD服务器计算型c6a和通用型g6a实例性能参数详解
  15. 飞扬的小鸟1.0测试版
  16. Python爬虫之模拟登录豆瓣获取最近看过的电影
  17. Uva 12627 Erratic Expansion
  18. 秘密潜入1-普通枪械射速修改-Python源码
  19. 搭建邮件服务器 提示554 DT:SPM 163
  20. 宿主FL Studio水果音乐制作Daw20.9

热门文章

  1. 交换排序图解_图解简单选择排序
  2. 税友报税软件让修改服务器地址,税友报税软件让修改服务器地址
  3. 服务器主机防御系统,主机入侵防御系统
  4. 5m 云服务器2核4g_华为云服务器2核4G 5M 248一年
  5. php一个数组赋值给对象,php数组与对象相互转换方法
  6. java debugtrace_Debug与Trace的区别
  7. java中的pattern_Java Pattern的用法是什么?
  8. oracle发送邮件附件,oracle发送邮件存储过程:
  9. 力扣(LeetCode)刷题,简单题(第9期)
  10. 三维空间平面拟合MATLAB