SQL Server触发器的作品 - 火灾只有一次(SQL Server Trigger that

2019-10-19 03:33发布

我想,当我的表中的数据变化做一些计算。 不过,我手动更新我的表,并复制粘贴一次约3000行。 这使我的工作触发3000次,但我希望它做的触发一次。

有没有办法做到这一点 ?

谢谢。

Answer 1:

如果通过“手动”你的意思是你要复制并粘贴到一些用户界面工具(如访问的数据网格)或类似的东西,则该工具可能会发行每行一个INSERT语句,并且在这种情况下,你的运气了的数据库触发器将每一次插入语句执行。 至于其他的答案已经提到的,如果你可以直接插入行到数据库中,使用单个INSERT语句,则触发才会触发一次。



Answer 2:

什么是你的理由?

如果你有多个插件 ,然后将火您正在运行的每个插件。 如果你想让它多刀片只执行一次,您必须:

  1. 写下您对单个语句插入,如insert into foo select * from bar
  2. 您的触发不能为每一行

其他的可能性是:

  1. 禁用触发器
  2. 执行你的插入
  3. 把触发器代码在存储过程
  4. 运行存储过程


Answer 3:

因为你是手工粘贴的3000行的问题引起的。 你真的有2个解决方案。 你可以这样做关闭触发:

ALTER TABLE tablename DISABLE TRIGGER ALL 
-- do work here 
ALTER TABLE tablename ENABLE TRIGGER ALL

然后在运行触发的内容然后结束或者你可以把你的3000列到一个临时表,然后一次插入它们。 这将只设置1个触发。 如果这还不够,请给我们你正在尝试做的更多信息。



Answer 4:

如果你是在一个单独的语句修改3000行,您的触发不会闪光3000次。 您的触发条件会一次,都会有你的虚拟“删除的”表3000行。



Answer 5:

如果你在你如何将数据导入到每行确实单个插入受系统限制的,我建议你将数据导入到一个中间表,然后做插入到从中间一个决赛桌。



文章来源: SQL Server Trigger that works - fires just once