【发布时间】:2010-09-21 17:28:58
【问题描述】:
我有一个审核触发器,它会自动将更新时间和更新用户的时间放在我所有表的字段中。我有另一组触发器,它们将事件信息从更新写入事件表。问题是当有人更新某些东西时,由于第一次触发,事件信息会被触发两次。如何抑制重复条目?
【问题讨论】:
我有一个审核触发器,它会自动将更新时间和更新用户的时间放在我所有表的字段中。我有另一组触发器,它们将事件信息从更新写入事件表。问题是当有人更新某些东西时,由于第一次触发,事件信息会被触发两次。如何抑制重复条目?
【问题讨论】:
我猜你有两个选择:
将两组触发器合并为一个。
或者,每个数据库的设置允许禁用触发器的递归触发。
【讨论】:
查看 TRIGGER_NESTLEVEL 函数。它返回触发器嵌套的当前级别。您可以检查以防止重复。
【讨论】:
如果您有足够的权限,您也可以一起关闭嵌套触发器(某些虚拟主机不允许您这样做)。有一个名为 sp_configure 的存储过程 (Sql 2005) 允许您修改服务器的配置。下面的语句禁用嵌套触发器,这将阻止触发器触发另一个触发器。
exec sp_configure '嵌套触发器', 0
【讨论】:
也可以在 SS2005 中禁用 trigger-fires-trigger 行为,方法是进入 SS Mgt Studio 并选择相关服务器的图标,右键单击,然后选择“属性”。然后从左侧列表中选择“高级”,并将“允许触发器触发其他”的值设置为“假”。
【讨论】: