写了一个用于排序的存储过程,很笨很简单的代码!




代码实现很简单,跟据传入的记录ID,参数 up,down,top,eof就可以实现上移,下移,置顶,置尾的功能了!!

上移:本记录与上条记录的序号字段进行交换,如果为第一条记录提示错误
下移:本记录与下条记录的序号字段进行交换,如果为最后一条记录提示错误
置顶:本记录置为1,如果已为第一条提示否则小于本记录序号的记录全部+1
置尾:本记录置为序号的最大值,如果已是最大值返回提示否则置为最大值,大于它的记录全部-1

注:使用本过程还要注意删除记录的时候同时要把大于被删除记录序号的字段全部-1,这样才能保证记录的连续性!


思路简单,性能低下呵呵!


CREATE   PROCEDURE  AdminClass_MoveMingzhan( @nID   int , @Moves   varchar ( 20 ), @OutId   int  OUTPUT)

AS


IF   @Moves = ' up '

     
IF  ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) - 1 = 0
         
SET   @OutId = 10001
     
ELSE
         
BEGIN
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = Mz_Top + 1   WHERE  Mz_Top = ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) - 1
         
UPDATE  Dh_Mingzhan  SET   Mz_Top = Mz_Top - 1   WHERE  Mz_ID = @nID
         
SET   @OutId = 100
         
END
IF   @Moves = ' down '
      

     
IF  ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) = ( SELECT   MAX (Mz_Top)  FROM  Dh_Mingzhan)
         
SET   @OutId = 10002
     
ELSE
         
BEGIN
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = Mz_Top - 1   WHERE  Mz_Top = ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) + 1
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = Mz_Top + 1   WHERE  Mz_ID = @nID
         
SET   @OutId = 100
         
END
IF   @Moves = ' top '
   
     
IF ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) = 1
         
SET   @OutId = 10003
     
ELSE
         
BEGIN
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = Mz_Top + 1   WHERE  Mz_Top < ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID )
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = 1   WHERE  Mz_ID = @nID
         
SET   @OutId = 100
         
END
IF   @Moves = ' eof '

     
IF ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID ) = ( SELECT   MAX (Mz_Top)  FROM  DH_Mingzhan)
         
SET   @OutId = 10004
     
ELSE
         
BEGIN
         
DECLARE   @MaxTop   INT
         
SET   @MaxTop = ( SELECT   MAX (Mz_Top)  FROM  Dh_Mingzhan)
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = Mz_Top - 1   WHERE  Mz_Top > ( SELECT  Mz_Top  FROM  Dh_Mingzhan  WHERE  Mz_ID = @nID )
         
UPDATE  Dh_Mingzhan  SET  Mz_Top = @MaxTop    WHERE  Mz_ID = @nID
         
SET   @OutId = 100
         
END
GO

转载于:https://www.cnblogs.com/assionsoft/archive/2007/11/16/961071.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值