本帖最后由 a121984376 于 2012-12-10 10:18:37 编辑

解决方案 »

  1.   

    如果 是连续的区间 ,可以用 between  and
      

  2.   

    declare @str varchar(100)='20,16,12'
    exec('Select * from Mapping Where OrganID in('+@str+')')
      

  3.   

    占个沙发再说。
    要不建个临时表,再inner join,这样效率会不会高点。等待高手。
      

  4.   


    4楼的方法与我直接拼接成sql 语句 有什么区别吗?
      

  5.   

    你应该问问自己,多个OrganID是怎么来的,如果是在sql里固定的,可以照你那样写,如果是从何变量中得来的,还能像你那样写?
      

  6.   

    Select * from Mapping Where OrganID =20
    union all
    Select * from Mapping Where OrganID =16
    union all
    .....这个也可以尝试下 看看速度
      

  7.   

    如果OrganID非常多的时候,我试过过千个,然后SQLServer连生成执行计划都不成功,也就是执行不了,我当时是把这些再做一步,生成一个表,然后关联,不仅不抱错了,也从20分钟降到20秒。在非常多的时候这个方法是可以的。
      

  8.   

    我想知道的是 4楼的方法 使用了exec  这个东西
    和我直接使用了 select * from Mapping  where OrganID in (12,34) 这样的语句有什么区别?
      

  9.   


    沒有,他的是在sql上進行字符串拼接,你直接在程序上拼接語句也行.