插入触发器不适用于批量插入;触发器正在使用游标

时间:2010-07-19 08:37:44

标签: sql-server-2005 tsql

在批量插入时,“插入”触发器仅适用于第一条记录,不适用于所有其他记录,但在使用光标插入记录时触发器可正常工作。

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

INSERT INTO DestinationTable (Column1, Column2)
SELECT * FROM SourceTable

我在插入记录的触发器中获得了几列,如下面的脚本,并使用它们来更新DestinationTable的列

SELECT @col1 = Column1, @col2 = Column2, FROM INSERTED
  1. 为什么在批量插入时,触发器没有 工作?
  2. 我错过了什么或者我必须这样做 使用光标吗?
  3. 我正在使用SQLServer 2005

    修改

    触发代码

    http://stashbox.org/957108/InsertTrigger.sql

    感谢。

3 个答案:

答案 0 :(得分:1)

从您发布的代码看起来像批量插入只是意味着插入多行。不是这个BULK INSERT

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

答案 1 :(得分:0)

光标上是因为每个记录一次插入一个而不是批量插入。因此,对于批量插入,它们会批量插入。因此触发器会为批次触发一次。

我想我曾经读过一次非常干净的解决方法。让我看看我是否能找到它。

编辑:你知道当你说批量操作时我甚至没有注意到sql并假设你使用的是bcp。但我仍然记得我将要寻找的解决方法。

EDIT2:好的,看一下这篇文章,看看它是否有助于你: http://weblogs.sqlteam.com/tarad/archive/2004/09/14/2077.aspx

答案 2 :(得分:-1)

谁说触发器没有使用bulkinsert或bulkcopy我做了它并且它完美地工作