[转]指定排序的一段存储过程
转自: 杰
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
在做项目的时候,经常碰到客户需要将某些信息按指定的顺序放在首页,所以写了存储过程.请各位指点.
说明:
表 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

浙公网安备 33010602011771号