博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql中带in条件的查询及提高效率
阅读量:6585 次
发布时间:2019-06-24

本文共 1110 字,大约阅读时间需要 3 分钟。

ALTER
 
PROCEDURE
 
[
dbo
]
.
[
example1
]
 
@booker
 
varchar
(
100
AS
 
declare
 
@str
 
varchar
(
1000
)  
set
 
@str
=
'
select * from tb_itregister where booker in(
'
 
+
 
@booker
 
+
 
'
)
'
 
execute
 (
@str
调用: 
string booker 
=
 "a,b"; 
        booker 
=
 booker.
Replace
(",", "
'
,
'
"); 
        booker 
=
 "
'
" + booker + "
'
"; 



 

/************************************************************

     问题描述: id值可能有数千个之多,怎么提高效率?
     例子:select * from table1 where id in (1,3,6,10,...,8000) and type = 1
 ************************************************************/
 
--例如:
    SELECT *
    
FROM   tb
    
WHERE  id IN (1234, ........)
           
AND NAME = 'best'    
     
 
--1.将括号的条件做成变量
    DECLARE @str VARCHAR(4000
    
SET @str = '1,2,3,4,5.......'
     
 
--2.然后将@s拆分后插入临时表
    CREATE TABLE #t
    (
        id 
VARCHAR(10)
    ) 
    
DECLARE @i    INT 
    
DECLARE @len  INT 
    
SET @i = 1 
    
WHILE @i < LEN(@str + ',')
    
BEGIN
        
INSERT #t
        
SELECT SUBSTRING(@str + ','@iCHARINDEX(','@str + ','@i-@i)
        
        
SET @i = CHARINDEX(','@str + ','@i+ 1
    
END 
 --3利用临时表和原表进行连接取值
    SELECT k.* 
    
FROM   tb k
           
INNER JOIN #t p
                
ON  p.id = k.id
    
WHERE  NAME = 'best'   
       

 

     本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638152.html,如需转载请自行联系原作者

 

你可能感兴趣的文章
有一个系统修复处于挂起状态,需要重新启动才能完成该修复
查看>>
Ubuntu上安装bind9
查看>>
访问共享提示“服务器存储空间不足,无法处理此命令。”
查看>>
第七章 虚拟化 虚拟机备份 Veeam backup &Replication
查看>>
路由器与交换机的密码恢复
查看>>
Cisco路由器上的IPSec协议(站点到站点的×××)
查看>>
Linux Python详细安装、升级指南
查看>>
无法修复ie使用代理服务器
查看>>
教你给IDEA安装插件
查看>>
隐蔽可扩展PHP Webshell – Weevely 1.0
查看>>
如何让Yii框架支持多个数据库
查看>>
用函数指针读取并调用虚函数表指向的每个函数
查看>>
Mysql查询ip段
查看>>
办公小贴士之:在Outlook 2010中添加农历生日
查看>>
我的友情链接
查看>>
ActionScript 3.0游戏编程——创建简单的ActionScript程序
查看>>
函数const
查看>>
关于“Return empty arrays or collections, not nulls”的思考
查看>>
UUID为36位
查看>>
程序员的经验
查看>>