我一直在搜索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)