0
点赞
收藏
分享

微信扫一扫

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 (1, 2, 3, 4, ........)

           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 + ',', @i, CHARINDEX(',', @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'   



举报

相关推荐

0 条评论