7

我有一个更新触发器,可以更新表中的一些重要状态字段tblCurrent
当我第一次将每天的一批记录上传到tblCurrent(大约 10K 条记录)中时,我会通过三个单独的存储过程执行一些更新,当它们第一次上传时,然后才上传。如何防止更新触发器在这三个初始更新期间运行?

4

3 回答 3

8

您可以暂时禁用表的触发器,然后重新启用它们。MSDN 文章

禁用触发器 { [ schema_name 。] trigger_name [ ,...n ] | 全部 } 开启 { 对象名称 | 数据库 | 所有服务器 } [ ; ]

启用触发器 { [ schema_name 。] trigger_name [ ,...n ] | 全部 } 开启 { 对象名称 | 数据库 | 所有服务器 } [ ; ]

例如,要禁用给定表的所有触发器,请运行以下语句:

DISABLE TRIGGER ALL ON tblCurrent;
于 2013-09-24T07:36:10.687 回答
4

一种方法是在其中包含一些数据tblCurrent,使您能够检测到您描述为“首次上传”的情况。例如,BIT 列“FirstUploaded”,或首次上传时为 NULL 的列,甚至是 BIT 列“DontFireTrigger”。

然后编写触发器来检测这种情况,并有条件地更新状态字段。

诚然,这看起来像一个讨厌的 hack,但也许并不比其他解决方案差。

于 2013-09-24T07:31:20.737 回答
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

于 2018-01-22T11:02:47.820 回答