chenjie0512

指定排序的一段存储过程

在做项目的时候,经常碰到客户需要将某些信息按指定的顺序放在首页,所以写了存储过程.请各位指点.
说明:
表 Firm ,  ID 号 F_ID_int,   排列序号 F_Num.  当F_Num 为0 时表示该信息不被指定排序.

Create   procedure SetOrder
@ID int,    --商户ID号
@Num int    --设置排名次数
as
begin
  declare @oldNum int    --商户原先排名
  declare @newNum int  --商户新排名

  set @newNum = @Num

  -- 事务开始
  begin transaction
    begin    
 

 -- 获取商户原先排名
 select @oldNum = F_Num
 from Firm
 where F_ID_int = @ID
 
 -- 0 表示该商户不在排名序列中
 if(@newNum = 0)
   begin
  update Firm
  set F_Num = F_Num - 1
  where F_Num >= @oldNum
   end
 else if(@oldNum = 0)
   begin
  update Firm
  set F_Num = F_Num + 1
  where F_Num >= @newNum
   end 
 else
   begin  
      if(@newNum < @oldNum)
        begin
   update Firm
   set F_Num = F_Num + 1
   where F_Num >= @newNum  and F_Num < @oldNum  and F_ID_int != @ID
        end
 
      if(@newNum > @oldNum)
        begin
   update Firm
   set F_Num = F_Num - 1
   where F_Num > @oldNum and F_Num <= @newNum and F_ID_int != @ID
        end
    end
 
 -- 设置新排名
 update Firm
 set F_Num = @newNum
 where F_ID_int = @ID 
 
 --防止排名次序不连续
 update Firm
 set F_Num = (select count(*) + 1 from Firm where TempFirm.F_Num < F_Num )
 from Firm TempFirm
 where TempFirm.F_Num > 0  
      
 if(@@Error <> 0)
  RollBack Transaction
    end
  commit transaction

end

posted on 2005-08-23 19:13    阅读(412)  评论(1)    收藏  举报

导航