在批量插入时,“插入”触发器仅适用于第一条记录,不适用于所有其他记录,但在使用光标插入记录时触发器可正常工作。
插入触发器会更新目标表的几列。要插入批量数据,我使用以下脚本
INSERT INTO DestinationTable (Column1, Column2)
SELECT * FROM SourceTable
我在插入记录的触发器中获得了几列,如下面的脚本,并使用它们来更新DestinationTable的列
SELECT @col1 = Column1, @col2 = Column2, FROM INSERTED
我正在使用SQLServer 2005
修改
触发代码
http://stashbox.org/957108/InsertTrigger.sql
感谢。
答案 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我做了它并且它完美地工作