declare @s int,@e int
set @s = 400
set @e = 770
if exists(select 1 from qzh_temp where @s between 开始号码 and 结束号码) 
   and exists(select 1 from qzh_temp where @e between 开始号码 and 结束号码) 
    select 1
else
    select 0

解决方案 »

  1.   

    这样?---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-28 19:47:07
    ---------------------------------
     
    --> 生成测试数据: @qzh_temp
    DECLARE @qzh_temp TABLE (开始号码 INT,结束号码 INT)
    INSERT INTO @qzh_temp
    SELECT 101,201 UNION ALL
    SELECT 305,400 UNION ALL
    SELECT 401,600 UNION ALL
    SELECT 601,760 UNION ALL
    SELECT 761,800 UNION ALL
    SELECT 802,990--SQL查询如下:DECLARE @start INT,@end INT
    SELECT @start=400,@end=770SELECT 
        开始号码,
        结束号码,
        flag=CASE WHEN 开始号码=(SELECT TOP 1 结束号码
                                 FROM @qzh_temp
                                 WHERE 结束号码<A.开始号码
                                 ORDER BY 结束号码 DESC)+1
                      AND 结束号码>@start
                      AND 开始号码<=@end
                      THEN 1
                   ELSE 0
              END
    FROM @qzh_temp AS A/*
    开始号码        结束号码        flag
    ----------- ----------- -----------
    101         201         0
    305         400         0
    401         600         1
    601         760         1
    761         800         1
    802         990         0(6 行受影响)
    */
      

  2.   

    create table qzh_temp(startid int,endid int) 
    insert into qzh_temp select 101,201 
    insert into qzh_temp select 305,400 
    insert into qzh_temp select 401,600 
    insert into qzh_temp select 601,760 
    insert into qzh_temp select 761,800 
    insert into qzh_temp select 802,990 
    go
    declare @s int,@e int
    set @s=400
    set @e=700select id=identity(int,1,1),startid into #t1 from qzh_temp a where not exists(select 1 from qzh_temp where endid=a.startid-1)
    select id=identity(int,1,1),endid into #t2 from qzh_temp a where not exists(select 1 from qzh_temp where startid=a.endid+1)
    select startid,endid from (
    select a.id,a.startid,b.endid from #t1 a inner join #t2 b on a.id=b.id
    )t where t.startid<=@s and t.endid>=@e
    go
    drop table qzh_temp,#t1,#t2
    /*
    startid     endid
    ----------- -----------
    305         800*/