Sql server 2005 插入触发器在批量插入上不起作用;触发器正在使用游标

Sql server 2005 插入触发器在批量插入上不起作用;触发器正在使用游标,sql-server-2005,tsql,Sql Server 2005,Tsql,在大容量插入时,插入触发器仅对第一条记录有效,不对所有其他记录有效,但当使用游标插入记录时,触发器可以正常工作 Insert触发器更新目标表的几列。要插入批量数据,我使用以下脚本 INSERT INTO DestinationTable (Column1, Column2) SELECT * FROM SourceTable 我在插入记录的触发器中得到了一些列,如下面的脚本,并对它们进行处理以更新DestinationTable的列 SELECT @col1 = Column1, @col2

在大容量插入时,插入触发器仅对第一条记录有效,不对所有其他记录有效,但当使用游标插入记录时,触发器可以正常工作

Insert触发器更新目标表的几列。要插入批量数据,我使用以下脚本

INSERT INTO DestinationTable (Column1, Column2)
SELECT * FROM SourceTable
我在插入记录的触发器中得到了一些列,如下面的脚本,并对它们进行处理以更新DestinationTable的列

SELECT @col1 = Column1, @col2 = Column2, FROM INSERTED
  • 为什么在批量插入时,触发器不会 工作
  • 我是错过了什么,还是不得不错过 使用光标
  • 我正在使用SQLServer2005

    编辑

    触发码


    谢谢。

    这是因为每个记录一次插入一条,而不是批量插入。因此,通过批量插入,他们可以批量插入。因此,触发器为该批触发一次

    我想有一次我读到一个非常干净的解决方法。让我看看能不能找到

    编辑:你知道吗,当你说批量操作时,我甚至没有注意sql,还以为你在使用bcp。但我仍然记得我将要寻找的工作

    编辑2:好的,看看这篇文章,看看它是否对你有帮助:

    从您发布的代码来看,批量插入似乎只是指插入多行。不是这个吗


    INSERTED
    伪表包含该语句插入的所有行。它不是行级触发器。您需要使用游标进行RBAR处理,或者理想情况下,将其作为一个集合进行处理。例如,如果您正在更新另一个表,您可以加入到插入的
    表中,并更新一条语句中的所有行。

    谁说触发器不适用于bulkinsert或bulkcopy?我制作了它,它工作得很好。

    文档怎么说?IIRC,他们会说你的经历。谢谢@spinon,如果你能找到它,那将是很大的帮助。谢谢Martin,你能详细说明一下吗;将其作为一个集合进行处理?SourceTable有10K行,我希望一次性插入DestinationTable中的所有行,并且希望插入触发器更新每一行。我已上载触发器脚本。请看我的编辑问题。如果你在阅读过程中也提到其他错误,那就太好了。我觉得一切都很好。比我想象的要长一点!基本上,为了让触发器在多行上工作,您可以只使用光标并以当前的方式处理每一行,或者您需要替换当前为每一行填充标量变量的部分,以便它在多行上工作。也许你可以从使用表变量而不是标量变量开始,然后尝试组合一些步骤。谢谢Martin。帮了大忙。真的很感激。如果有人想知道我们必须如何准确地为它编码,请问我。