我有一个更新触发器,用于更新表tblCurrent
中的一些重要状态字段
当我第一次将每日记录批量上传到tblCurrent
(大约10K记录)时,我会在首次上传时通过三个单独的存储过程执行一些更新,然后才会这样做。
如何在这三个初始UPDATE期间阻止更新触发器运行?
答案 0 :(得分:4)
您可以临时禁用表的触发器,然后重新启用它们。 MSDN article
DISABLE TRIGGER {[schema_name。 ] trigger_name [,... n] |所有} ON {object_name |数据库|所有服务器} [; ]
ENABLE TRIGGER {[schema_name。 ] trigger_name [,... n] |所有} ON {object_name |数据库|所有服务器} [; ]
例如,为给定的表运行以下语句禁用所有触发器:
DISABLE TRIGGER ALL ON tblCurrent;
答案 1 :(得分:3)
执行此操作的一种方法是在tblCurrent
中添加一些数据,使您能够检测到您描述为“首次上传”的情况。例如,BIT列“FirstUploaded”,或首次上载时为NULL的列,甚至是BIT列“DontFireTrigger”。
然后编写触发器以检测此情况,并有条件地更新状态字段。
不可否认,这看起来像是一个讨厌的黑客,但也许并不比其他解决方案更糟糕。
答案 2 :(得分:0)
您可以使用会话变量Context_Info。在更新之前将context_info设置为某个值,然后在触发器内进行测试
-- update code
SET Context_Info 0x55555
Update Table set ...
-- Code Inside the trigger
SELECT @Cinfo = Context_Info()
IF @Cinfo <> 0x55555 BEGIN
...
END