用于DataGrid MoveUp,MoveDown的存储过程

本文介绍了一个SQL存储过程的设计,该过程用于在一个表格中轻松地调整记录的排序顺序。通过传递参数,可以实现向上或向下移动指定记录的功能,并且整个逻辑都在存储过程中完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有逻辑都写到了存储过程中,所以在使用的时候,直接调用存储过程即可,无需在前台代码中做过多的处理,但是一定要记得在绑定的sql语句中必须有order by orderno来排序

--测试表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Job_Person]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
drop table [dbo].[Job_Person]
GO

CREATE TABLE [dbo].[Job_Person] (
    
[Job_PersonID] [int] NOT NULL ,
    
[PersonID] [int] NOT NULL ,    
    
[OrderNo] [int] NULL ,    
    
[CreateOn] [datetime] NULL ,
    
[CreateByID] [int] NULL ,
    
[ModifyOn] [datetime] NULL ,
    
[ModifyByID] [int] NULL 
ON [PRIMARY]
GO

--测试存储过程
CREATE PROCEDURE tp_MoveOrder_Entity_Job
(
         
@Job_EntityID        int        ,--表主键id
     @Direction         INT,        -- @Direction : move up : -1 , move down : 1
     @UserID         int        --修改人id
)  
AS
declare @EntityID         int
declare @OrderNo      INT
declare @MaxOrderNo Int

declare @OrderNo_1 int
declare @OrderNo_2 int

declare @Job_EntityID_1 int
declare @Job_EntityID_2 int

BEGIN

SET NOCOUNT ON

BEGIN 
      
      
Select @OrderNo = OrderNo, @EntityID = PersonID From Job_Person
                
Where Job_PersonID = @Job_EntityID

       
select @MaxOrderNo = max(OrderNo) From Job_Person
                
WHERE  PersonID = @EntityID

            
SET @OrderNo_1 = @OrderNo
            
SET @OrderNo_2 = @OrderNo + @Direction                     

        
if (@MaxOrderNo = 1 )
                
return 0    --只有一条记录则返回            

        
if ((@OrderNo  = 1 ) AND (@Direction = -1))--设置move up orderno
        BEGIN
                
            
SET @OrderNo_1 = 1
            
SET @OrderNo_2 = @MaxOrderNo      
        
END

        
if ((@OrderNo  = @MaxOrderNo ) AND (@Direction = 1))--设置move down orderno
        BEGIN
                
            
SET @OrderNo_1 = 1
            
SET @OrderNo_2 = @MaxOrderNo      
        
END

        
--根据orderno取得不同的move资料
        select @Job_EntityID_1= Job_PersonID from Job_Person
        
where PersonID = @EntityID   and OrderNo = @OrderNo_2
        
        
select @Job_EntityID_2= Job_PersonID from Job_Person
        
where PersonID = @EntityID and OrderNo = @OrderNo_1 
    
--update orderno
    update Job_Person
    
set orderno = @OrderNo_1,
    ModifyOn 
= getdate(),
    ModifyByID 
= @UserID
    
where Job_PersonID = @Job_EntityID_1
     
IF @@ERROR <> 0
        
RETURN 1    
    
--update orderno
     update Job_Person
    
set orderno = @OrderNo_2,
    ModifyOn 
= getdate(),
    ModifyByID 
= @UserID
    
where Job_PersonID = @Job_EntityID_2
     
IF @@ERROR <> 0
        
RETURN 1         
END      

RETURN 0

END
GO
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值