• sql中带in条件的查询及提高效率


    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'   
           

     

     

     

     

  • 相关阅读:
    软件测试:等价类划分——应用
    软件测试———白盒测试、黑盒测试与灰盒测试
    对软件项目管理的感想
    用maven进行项目管理
    my git ~
    ios支付宝的集成
    三个文本框的验证
    ios测试工具研究(1)-----------XCTest 单元测试
    等价类划分的思考
    git相关
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1638152.html
Copyright © 2020-2023  润新知