[转]指定排序的一段存储过程

 转自:

在做项目的时候,经常碰到客户需要将某些信息按指定的顺序放在首页,所以写了存储过程.请各位指点.
说明:
表 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 @ 2006-04-21 11:13  李振波  阅读(150)  评论(0)    收藏  举报