select @NoID= 
case when exists(select id from annou where id=1) then 1
else SELECT MIN(id + 1) AS NoID
FROM annou
WHERE ((id + 1) NOT IN
          (SELECT id
         FROM annou))
end

解决方案 »

  1.   

    select min(t.a+1) from  (select a from test  union select 0 as a from test) t where a+1 not in(select a from test)
      

  2.   

    谢谢楼上的朋友,不过你还有一点小错误,应该下面这样写才完全正确、
    declare @NoID int
    select @NoId= 
    case  when not exists(select id from annou where id=1) then 1
    else (SELECT MIN(id + 1) AS NoID
    FROM annou
    WHERE ((id + 1) NOT IN
              (SELECT id
             FROM annou)))
    end
      

  3.   

    select min(a+1) from  (select a from test  union select 0  from test) t where not exists (select 1 from test where t.a+1 =test.a)如此也可,呵呵
      

  4.   

    >>谢谢 sky_blue(老衲) 不过我想问一你一个问题:
    我对你的语句有几处不是很明白,你可以帮我讲一下吗?
    你所用的select ... from (select ...) t where ....
    所用的from (select ...) t where 
    是什么意思呢?还忘解答.
      

  5.   

    也可以用下面的语句:
    SELECT NoID=(case when MIN(id)>1 then 1 else MIN(id)+1 end)
    FROM annou
    WHERE ((id + 1) NOT IN
              (SELECT id
             FROM annou))