【发布时间】:2025-12-20 08:45:07
【问题描述】:
在 SQL Server 2005 中,触发器是否有办法找出负责触发触发器的对象?我想用它来禁用一个存储过程的触发器。
有没有其他方法可以只为当前事务禁用触发器?我可以使用下面的代码,但如果我没记错的话,它也会影响并发事务——这将是一件坏事。
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
如果可能,我想避免在我的表中使用“NoTrigger”字段并执行NoTrigger = null 的技术,因为我希望表尽可能小。
我想避免触发器的原因是因为它包含对手动更新表很重要的逻辑,但我的存储过程会处理这个逻辑。因为这将是一个高度使用的过程,所以我希望它快。
触发器会在服务器上施加额外的开销,因为它们会启动隐式事务。一旦执行了触发器,就会启动一个新的隐式事务,并且事务内的任何数据检索都将锁定受影响的表。
发件人:http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1170220,00.html#trigger
【问题讨论】:
-
您可以使用 Exec 函数来禁用和启用存储过程中的触发器。示例:`EXEC ('ENABLE TRIGGER dbo.TriggerName on dbo.TriggeredTable')`
标签: sql-server tsql triggers