--生成测试数据
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
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、先删除起始号和终止号完全在被使用号段之间的数据
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 两的号段,这种情况应该怎么处理?添加一条记录?