sql server里面实现这个功能:删除一条记录,编号不能断层,编号不是自动编号
********************************
我想在sql server里面实现这个功能:有多行记录,有编号1-1000 如果把其中的一条记录删除 如 第50 那么51就要变成50,
依次下去到999重新排序 删除的同时 实现这个功能
*******************************
你的这个处理方式效率实在是低,如果数据变更大,SQL服务器不忙死!
你可以这样考虑:
本来编号是连着的,现在删掉了一条记录(或者多条),我不管它先。
当有数据插入的时候,我搜索出当前记录断号的的最小数,插入一条。
每插入一条都作此判断,当中间补号记录完,数据直接插到最大编号的后面。
这样得到的记录编号依然是连号的
**************************************
用触发器或存储过程来实现
比如用一条语句来实现:update table1 set id=id-1 where id>49
不知道把ID字段的属性设为唯一后会不会出现问题,可以试下
*************************
create table test(id int,name varchar(10))
insert test select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'d' union all
select 5,'e' union all
select 6,'f'
create trigger deleteid on test
for delete
as
update test set id=id-1 where id>(select id from deleted)
執行:
delete from test where id=3
結果:
select * from test
id name
----------- ----------
1 a
2 b
3 d
4 e
5 f
(影響 5 個資料列)
局限:每次只能刪除一筆資料
***********************************
修改后:
alter trigger deleteid on test
for delete
as
declare @min int,@max int
select @min=min(id),@max=max(id) from deleted
update test set id=id-@min where id>=@max
delete from test where id between 2 and 3
結果:
id name
----------- ----------
1 a
2 d
3 e
4 f
(影響 4 個資料列)