运行(更新后)触发器类型后取消主触发器

时间:2019-09-10 17:58:35

标签: sql sql-server tsql

我创建了一个触发器,该触发器是“键入后更新”,并且此更新命令(在其内部)可以再次调用主触发器。如何对SQL Server说如果在更新触发器被调用之后又没有再次调用主触发器。

2 个答案:

答案 0 :(得分:2)

  1. 使用* * * * * cd /path-to-your-project && php artisan schedule:run --env=scheduler >> /dev/null 2>&1

要防止从触发器内部更新表时触发器无限期地递归,您可以使用COLUMNS_UPDATED()测试哪些列已更新,然后在更新模式只能来自触发器内部时返回。例如

COLUMNS_UPDATED()
  1. 使用ALTER trigger [dbo].[MyTable_Trigger] on [dbo].[MyTable] for insert, update, delete as begin set nocount on; declare @ColumnsUpdated varbinary(10) = COLUMNS_UPDATED(); -- Ignore trigger updates -- Identify specific pattern for trigger update, knowing it may change if the table structure changes if @ColumnsUpdated = 0x00000000000000008000 return; -- rest of trigger end

您可以使用@@NESTLEVEL来检测您是在第一个触发呼叫中还是在以后的触发呼叫中。对于直接更新,@@NESTLEVEL在第一个调用中将为1,在第二个调用中为2。如果您从存储过程中执行更新-对于每个嵌套存储过程一次,则会增加这种情况。

答案 1 :(得分:1)

  

递归触发器

     

AFTER触发器不会递归调用自身,除非   设置了RECURSIVE_TRIGGERS数据库选项。

来自文档:Recursive Triggers