?? 刪除一條記錄,編號不能斷層,編號不是自動編號.txt
字號:
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 個資料列)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -