表事件有一个而不是触发器,其目的是生成主键EventId为Max + 1,其余列从插入中填充。
EventId不是Identity,我们无法识别它,因为那里存在很多依赖,触发逻辑:
SELECT TOP 1 @ID = Event.EventID FROM Event
IF (@ID IS NULL)
BEGIN
SET @ID=1
END
ELSE
BEGIN
SELECT @ID = MAX(Event.EventID) FROM Event
SET @ID=@ID+1
END
--Then just a insert statment with this id as EventId and rest of the columns from inserted table
现在有时当我试图插入这个表时,它仍然说不能在eventId中插入副本,不确定为什么这很开心......
在某些情况下看起来触发器不会触发?为什么
答案 0 :(得分:2)
您可能假设插入的伪表中有一行,并且在发生多行插入时失败。
你想要这样的东西:
;with maxID as (
select MAX(EventID) as EventID from Event
), nrows as (
select
ROW_NUMBER() OVER (ORDER BY newid()) +
COALESCE((select EventID from maxID),0) as EventID,
/* columns from inserted table */
from inserted
)
insert into Event (EventID,/* other columns */)
select EventID,/* other columns */
from nrows
答案 1 :(得分:1)
您需要使用某种锁定来防止生成重复的ID。看一下类似问题的this thread,了解如何解决这个问题。