--生成测试数据
CREATE TABLE 发货单索引表(序号 INT,部门代码 INT,发货单类型 INT,起始号 INT,终止号 INT)
INSERT INTO 发货单索引表 SELECT 1,2,4,1000,2000
INSERT INTO 发货单索引表 SELECT 2,4,3,3000,5000
INSERT INTO 发货单索引表 SELECT 3,2,4,6000,8000
INSERT INTO 发货单索引表 SELECT 4,2,4,8001,9000 
--执行更新操作
declare @sNum int,@eNum int
set @sNum = 6500  --被使用的起始号码
set @eNum = 8500  --被使用的终止号码delete 
    发货单索引表 
where 
    (起始号 between @sNum and @eNum) 
    and 
    (终止号 between @sNum and @eNum)update 
    发货单索引表 
set 
    起始号 = case when 起始号 between @sNum and @eNum then @eNum+1 else 起始号 end,
    终止号 = case when 终止号 between @sNum and @eNum then @sNum-1 else 终止号 end
where
    (起始号 between @sNum and @eNum) 
    or 
    (终止号 between @sNum and @eNum)select * from 发货单索引表--查看更新结果
序号   部门代码  发货单类型  起始号  终止号
-----  --------  ----------  ------  ------
1      2         4           1000    2000
2      4         3           3000    5000
3      2         4           6000    6499
4      2         4           8501    9000

解决方案 »

  1.   

    一步是无法实现的
    1、先删除起始号和终止号完全在被使用号段之间的数据
    2、再将与被使用号段有交集的数据更新到边界值。
      

  2.   

    一步是无法实现的
    1、先删除起始号和终止号完全在被使用号段之间的数据
    2、再将与被使用号段有交集的数据更新到边界值。
    应该还有3 如下表:
    --查看更新结果
    序号   部门代码  发货单类型  起始号  终止号
    -----  --------  ----------  ------  ------
    1      2         4           1000    2000
    2      4         3           3000    5000
    3      2         4           6000    6499
    4      2         4           8501    9000
    如果上报的号码段为:1400-1800,即上报数据在数据库的一个号码段内,则该号码段将被分割为1000-1399,1801-2000 两的号段,这种情况应该怎么处理?添加一条记录?