在 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