0

我一直在寻找stackoverflow,但我没有找到我要找的东西。我有一个 Sql Server 数据库。我想在每次插入或更新时更新一个带有“优先级”字段的表。

问题是我想使用以下规则执行优先级堆:1.-如果我尝试插入的值具有已经存在的优先级值,则表中的每个连续行都必须更改其优先级值加上 1. 2.-如果我尝试插入的值具有不存在的优先级,则触发器不执行任何操作。

这是我建立的触发器:

ALTER trigger [Priority]
on [dbo].[TBL_PILA]
after insert, update    
 AS
    declare @priority int;
    declare @reg_id int;
    SELECT @reg_id =i.id from inserted i;   
    SELECT @priority =PRIORITY from TBL_PILA where ID =@reg_id    
      -- perform update here in TBL_PILA table        
    UPDATE TBL_PILA SET PRIORITY=PRIORITY+1 WHERE ID <>@reg_id AND PRIORITY>=@priority
 GO

编辑:作为建议,我像这样更改触发器主体:

ALTER trigger [Priority]
on [dbo].[TBL_PILA]
after insert, update  
if exists (select * 
         from inserted i join TBL_PILA m
         on i.ID = m.ID
         )
update TBL_PILA set PRIORITY = PRIORITY + 1 
where exists (select * from inserted i 
              join TBL_PILA m
              on i.ID = m.ID
              where m.PRIORITY>=i.PRIORITY)

现在我有一个新问题:插入的优先级值受触发器影响,它也被加1。

有人知道如何增加仅影响某些范围的优先级值,如下所述?

问题是只要存在几个连续值和一个不连续值,触发器就必须停止。示例 优先级 1 2 4 5 6 8

如果我尝试插入优先级 = 3 的行,结果应该是:1 2 3 4 5 6 8

然后,如果我尝试插入优先级 = 4 的行,则结果应为: 1 2 3 4(插入值) 5 (4+1) 6 (5+1) 7 (6+1) 8

但是使用我构建的触发器,我得到了:1 2 3 4 5 6 7 9 (8+1)

4

0 回答 0