更新触发条件值

时间:2013-08-27 07:54:43

标签: sql-server triggers

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

问题是我想使用此规则执行优先级堆: 1.-如果我尝试插入的值具有已存在的prority值,则表中的每个连续行必须更改其优先级值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)

0 个答案:

没有答案