表事件有一个替代触发器,其目的是生成主键EventId为Max+1,其余列由insert填充。
EventId不是Identity,我们不能让它成为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 中插入重复项,不知道为什么会发生这种情况...
看起来触发器在某些情况下没有触发?为什么
最佳答案
您可能假设插入的伪表中只有一行,并且在发生多行插入时会失败。
你想要这样的东西:
;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
关于SQL 而不是触发器有时不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759900/