学习写第一个SQL server触发器

在最近的程序中,有一个字段表示排序,1~N的。但却不能是自增的类型,因为用户可以交换这个排序的先后的。

如果已经记录的order是:1,2,3,4,5,6

如果删了1,3,4的话,余下的记录变成了2,5,6,这不太符合要求,我希望记录始终从1开始,并且中间不能间断,即便你删了134,剩下记录的order还要是1,2,3

起初做到存储过程中,当删除的时候对其重新排序,后来一想,触发器不是更好吗?

于是就有了:

CREATE TRIGGER [reorderAfterDel]
   ON  [dbo].[Categories]
   AFTER DELETE
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
 declare @left int;
 declare @i int;
 select categories,orders into #categoriesTemp from [dbo].[Categories];
 select @left=count(*) from #categoriesTemp;
 set @i=1;
 while(@left>0)
 begin
  declare @minOrder int;
  select @minOrder=min(orders) from #categoriesTemp;
  if(@minOrder>@i)
  begin
   update [dbo].[Categories] set orders=@i where orders=@minOrder;
  end
  delete from #categoriesTemp where orders=@minOrder;
  set @i=@i+1;
  set @left=@left-1;
 end
 drop table #categoriesTemp;
END

现在无论怎么删,剩余的order总是从1开始的,并且中间不间断了。
来源:http://99love.blueidea.com/archives/2007/5332.shtml

posted @ 2007-12-20 22:38  fisherman  阅读(263)  评论(0)    收藏  举报