首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于delete删除某表中某些记录的原理有关问题

2012-01-19 
关于delete删除某表中某些记录的原理问题请教delete删除某表中某些记录的原理是怎样的,是每条记录挨个删除

关于delete删除某表中某些记录的原理问题
请教delete删除某表中某些记录的原理是怎样的,是每条记录挨个删除还是以某中方式批量执行
下面的现象触发了上面的问题,请做出解释
有两张表
国家表State
1中国China
2美国America
3英国England
省表Province
1北京BeiJing1
2重庆ChongQing1
3四川SiChuan1
4纽约NewYork2
5伦敦London3
--为Province创建delete触发器,当删除某个省后,重新排列Province表的主键编号
if   exists(select   *   from   sysobjects   where   type= 'tr '   and   name= 'Province_UpdatePRID_Del ')
drop   trigger   Province_UpdatePRID_Del
go
create   trigger   Province_UpdatePRID_Del
on   Province
for   delete
as
declare   @PRID   int
select   @PRID=PRID   from   deleted
declare   @tempID   int
set   @tempID=@PRID+1
while   @tempID <=((select   count(*)   from   Province)+1)
begin
update   Province   set   PRID=@tempID-1   where   PRID=@tempID
set   @tempID=@tempId+1
end
执行
delete   Province   where   STID=2后,得到理想结果
1
北京BeiJing12
重庆ChongQing13
四川SiChuan14
伦敦London33
然而当执行
delete   Province   where   STID=1时
得到结果如下
4伦敦London3
请问为什么????
请教解决办法

[解决办法]
删除一定是单条处理。
这个表的结构设计得不好。
[解决办法]
if exists(select * from sysobjects where type= 'tr ' and name= 'Province_UpdatePRID_Del ')
drop trigger Province_UpdatePRID_Del
go
create trigger Province_UpdatePRID_Del
on Province
for delete
as
declare @PRIDMIN int
declare @PRIDMAX int
select @PRIDMIN=min(PRID),@PRIDMAX=MAX(PRID) from deleted
while @PRIDMIN <=(select count(*) from Province)
begin
update Province set PRID=@PRIDMIN where PRID=@PRIDMAX+1
set @PRIDMIN=@PRIDMIN+1
set @PRIDMAX=@PRIDMAX+1
end
[解决办法]
把你级联删除的触发器写在你自动更新编号触发器的前面就OK了...

热点排行