我在SQL中执行语句
select * from qu_question where qu_id in (1,2,3,......)括号中的ID值有3、4千个。短的时候还不出错,括号里面的数值超过大约3000个就会出错。
请教高手,应该如何解决。

解决方案 »

  1.   

    如果是限定范围的,可以用Between,这样要快很多,  WHERE BETWEEN 1 AND 4000如果范围不固定,要看有什么规率,没规率的话,无解。
      

  2.   

    变通一下:
    declare @str varchar(8000)
    set @str = '1,2,3,4,5'  /*将in后面的表达式列表转换成一个字符串*/
    select * from qu_question 
    where charindex(',' + cast(qu_id as varchar(10)) + ',',',' + @str + ',') > 0
      

  3.   

    其实in实现的就是or的功能,
    select * from tablename where id in (2,3)
    就相当于
    select * from tablename where id=2 or id=3
    所以你就可以写成or的形式,如果不怕麻烦的话。这是什么需求,in和or都会引起全表扫描。效率可不好噢。
      

  4.   

    ----创建测试表
    declare @t table(id int identity)
    declare @i int
    set @i = 1
    ----向表中添加19行
    while @i < 20
    begin
    insert @t default values
    set @i = @i + 1
    end 
    select * from @t
    ----将这19行的ID连接成charindex需要的字符串
    declare @str varchar(8000)
    set @str = ''
    select @str =@str + ',' + cast(id as varchar(10)) from @t
    set @str = stuff(@str,1,1,'')
    print @str     /*'1,2,3,4,....,19'*/
    ----测试
    select * from @t where charindex(',' + cast(id as varchar(10)) + ',',',' + @str + ',') > 0