这是我学习数据库的时候在论坛上找到的相关问题

源代码在线查看: 删除一条记录,编号不能断层,编号不是自动编号.txt

软件大小: 5 K
上传用户: zhangyuntong
关键词: 数据库 论坛
下载地址: 免注册下载 普通下载 VIP

相关代码

				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 個資料列)
							

相关资源