我想在我的表数据更改时进行一些计算。但是,我正在手动更新我的表格,并一次复制粘贴大约3000行。这使我的触发器工作了3000次,但我希望它只触发一次。SQL Server触发器工作 - 只触发一次
有没有办法做到这一点?
谢谢。
我想在我的表数据更改时进行一些计算。但是,我正在手动更新我的表格,并一次复制粘贴大约3000行。这使我的触发器工作了3000次,但我希望它只触发一次。SQL Server触发器工作 - 只触发一次
有没有办法做到这一点?
谢谢。
如果通过“手动”,你的意思是你复制并粘贴到某个用户界面工具(如Access dataGrid)或类似的东西,那么该工具可能会在每行发出一个插入语句,在这种情况下,运气不好的话,数据库触发器将在每个插入语句中执行一次。正如其他答案所提到的那样,如果您可以使用单个插入语句将行直接插入数据库中,那么触发器将只触发一次。
你的声明是什么?
如果您有多个插入那么它会触发您正在运行的每个插入。如果你想让它多刀片只执行一次,你必须:
insert into foo select * from bar
其他的可能性是:
,您的触发不会闪光3000次。你的触发器会触发一次,虚拟“删除”表中将有3000行。
我认为通过'手动'的OP可能意味着他正在复制和粘贴到一些像访问网格之类的UI工具或类似的东西,在这种情况下,该工具可能会发出每行一个插入语句...... – 2010-01-15 14:56:29
该问题是由于您手动粘贴3000行而引起的。你真的有2个解决方案。你可以这样做关闭触发:
ALTER TABLE tablename DISABLE TRIGGER ALL
-- do work here
ALTER TABLE tablename ENABLE TRIGGER ALL
,然后在运行触发的内容然后结束或者你可以把你的3000列到一个临时表,然后一次插入它们。这只会设置1个触发器。如果这还不够,请给我们更多关于你想要做什么的信息。
那么我没有明确的解决你的第一种解决方法。你说“在这里工作”,但我正在手动做这项工作?你是什么意思,我想我错了。顺便说一句我正在使用访问时复制粘贴。 – stckvrflw 2010-01-15 15:08:29
我的意思是运行ALTER TABLE tablename DISABLE TRIGGER ALL,然后粘贴你的行,然后运行ALTER TABLE tablename ENABLE TRIGGER ALL。一旦完成,您需要运行触发器中的脚本,以便更新所有这些行。 – 2010-01-15 16:49:07
如果您限制如何将数据导入到每行插入一次的系统中,我建议您将数据导入到中间表中,然后从中间表中插入到最终表中。
是的我正在使用访问 – stckvrflw 2010-01-15 15:06:41
是的,正如我想的那样......恐怕只要你坚持这样做手动,通过访问tableview(或任何被称为) - 你卡住了。 – 2010-01-15 16:31:12