我在表上创建了一个 DML 触发器(AFTER INSERT、UPDATE、DELETE)
触发器的逻辑大约需要 30 秒才能执行
因此,即使您更改 1 行,由于触发器执行,也需要 30 秒左右
开发人员问我“触发器是否有可能是触发并忘记操作?”
我说不是,但真的是这样吗?
问题:
可以在“异步”模式下执行触发器吗?
应用程序在几毫秒内更新了几行,并认为事务已完成,然后触发器在后台静默执行?
我知道从一致性的角度来看,这实际上看起来并不好,但是,这可能吗?
我在表上创建了一个 DML 触发器(AFTER INSERT、UPDATE、DELETE)
触发器的逻辑大约需要 30 秒才能执行
因此,即使您更改 1 行,由于触发器执行,也需要 30 秒左右
开发人员问我“触发器是否有可能是触发并忘记操作?”
我说不是,但真的是这样吗?
问题:
可以在“异步”模式下执行触发器吗?
应用程序在几毫秒内更新了几行,并认为事务已完成,然后触发器在后台静默执行?
我知道从一致性的角度来看,这实际上看起来并不好,但是,这可能吗?
据我所知,这对于 Azure / SQL Server的触发器功能是不可能的。正如您所提到的,一个原因可能是它破坏了数据库ACID主体的Consistency属性:
触发器旨在与导致它们触发的操作同步触发事务。想象一下,如果触发器依赖的数据行在触发器异步执行之前被删除。这会给你带来很多麻烦。
或者,您可以有一个触发器,它只是将一行添加到队列表中,例如一个SQL 代理作业,它不断运行检查该队列表并使用原始触发器中的逻辑触发存储过程以模拟异步事件。也许这会改善您的工作流程?