2017-10-05 168 views
0

我有2个datatriggers,都应该经过更新插入另一个火。这是更新触发年初的样子:AFTER UPDATE触发器盯着INSERT触发 - SQL服务器

USE [Database] 
    GO 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    ALTER TRIGGER [dbo].[UpdateTrigger] 
    ON [dbo].[Table1] 
    AFTER UPDATE 
    AS 
    BEGIN 
    (...) 

后插入触发器长得一模一样,除了一个事实,即还有的后面插入,而不是更新后。当我更新Table1时,只会触发更新触发器。但是,当我插入时,两个触发器都被触发。为什么?我该如何解决它?

+0

没有看到两个触发器中的代码,我们无法确定这里发生了什么。 –

+0

你所描述的是不可能的。如果触发器被定义为AFTER UPDATE,它不会在INSERT后触发。你能分享你的触发器代码吗? –

+0

如果我们假设*您的插入触发器更新了同一个表,那么该操作将导致更新触发器执行。而且我还会猜测,您基于更新触发器的效果进行观察,而无需实际调试代码以“查看”插入的触发器的效果。也许更新触发器会覆盖插入触发器的影响? – SMor

回答

0

触发器触发时会出现2个虚拟表格:DELETED和INSERTED。插入记录时,只有INSERTED表中有记录,但是当您更新记录时,在DELETED表中有旧记录,而在INSERTED表中有新记录。所以,基本上当你做UPDATE时,你在做DELETE和INSERT。通过识别DELETED表中是否有记录,您可以轻松解决该问题。如果有,那么它是UPDATE,如果没有,那么它是INSERT。

+0

我试着检查是否有使用以下命令DELETED中的任何记录:IF EXISTS(SELECT * FROM DELETED),但条件返回true,虽然它是一个插入。我使用错误的语法吗? – JerryBox

+0

我不确定在语法上是否存在问题,但是如果您在插入DELETED表后插入了记录,那么肯定有错误 –

+0

您可以为插入和更新创建1个触发器。 CREATE TRIGGER xxx ON xxx后插入,更新... –