先把这个ID的集合倒入一个临时表,再用
select * from table where ID in (select id from #tmp)

解决方案 »

  1.   

    没有其他办法了么?我想一个SQl语句完成这个功能,因为这个操作非常频繁,有效率上的要求,谢谢
      

  2.   

    有没有可能调用存储过程,而存储过程中对把ID集会作为一个varbyte参数传人,在过程实现中对该二进制块进行分解后与指定的ID逐一判断
      

  3.   

    你可以把这些成千上万个写到一个表里再
    select * from table where ID in (select id from 表)好处:可以解决你的问题,可以不用没次执行都要传递千上万个id到sqlserver里,只要调用一下这个表就OK了。
      

  4.   

    用表变量就行了嘛.
    至于效率,你肯定要从一个地方得到要查询的ID.这个根据你的情况看是否有更有效的方法.
    你最好说明你的实际情况.dclare @tb table(id int)
    insert into @tb
      select 1
      union all select 2
      ...你要查询的ID值select * from table where ID in (select id from @tb)
      

  5.   

    你即然说是语句要超长,那语句上也做不出什么文章了.临时表到是个好办法,就是慢了点.还有一点我不理解,你哪里来的这个超大ID集合,如果不是表里来的,那人怎么可能在短时间内做出这个ID集合,大到能让SQL语句超长.
      

  6.   

    用函数调用:把id集合放在函数 fnReturnID中,然后select * from table where ID in (select id from fnReturnID)
      

  7.   

    是不是这个意思啊:
    select * from 一个有多个字段的表 where id in(select id from 现在已知一个ID的集合)
      

  8.   

    zjcxc(邹建) ,你好,不知在你的建议中,如何传入我的ID集合中的那些ID值,麻烦你详细说下,在VC++编程环境下,假设那些ID目前存放在CArray<int,int>中,如何在你给出的代码中嵌入这些ID?谢谢
      

  9.   

    meigo(草莓),可以理解为你的意思
      

  10.   

    Rivulet119(黑眼睛) ,在VC++编程环境下,假设那些ID目前存放在CArray<int,int>中,那么id集合如何放在你所说的函数 fnReturnID中,麻烦你讲详细点,谢谢
      

  11.   

    将CArray<int,int>转换为String作为参数传递给存储过程,由存储过程执行sql并返回结果集。
    create proc filterFromIdSet
    @idSet text
    as
      exec('select * from table where ID in ( ('+@idSet+')')
    go