为什么在SSIS插入期间我的触发器不会触发?

时间:2012-06-01 03:59:12

标签: sql triggers ssis bulkinsert

我有一个带有OLE DB Destination组件的SSIS数据流任务,该组件将记录插入带触发器的表中。当我对该表执行正常的INSERT语句时,触发器会触发。当我通过SSIS任务插入记录时,触发器不会触发。

如何在SSIS中触发触发器?

3 个答案:

答案 0 :(得分:49)

由于OLE DB Destination任务使用批量插入,因此默认情况下不会触发触发器。来自BULK INSERT (MSDN)

  

如果未指定FIRE_TRIGGERS,则不会执行插入触发器。

必须通过高级编辑器手动指定 FIRE_TRIGGERS 作为OLE DB组件的一部分。

enter image description here

然后将“FIRE_TRIGGERS”添加到 FastLoadOptions 的值中(请注意选项以逗号分隔):

enter image description here

使用该选项后,触发器应在任务执行期间触发。

答案 1 :(得分:15)

补充了ladenedge的答案。

  

因为OLE DB目标任务使用批量插入,所以触发器是   默认情况下不会被解雇

当您选择“快速加载”选项时,这是真的。

enter image description here

如果将其更改为常规“表格或视图”数据访问模式,则触发器应正常触发,因为插入是逐行完成的

答案 2 :(得分:0)

通过使用记事本(或任何其他文本编辑器)编辑dtsx文件,可以在不使用SQL Server数据工具的情况下执行此操作。

搜索以下属性:

<property
 dataType="System.String"
 description="Specifies options to be used with fast load.  Applies only 
 if  fast load is turned on."
 name="FastLoadOptions">
      TABLOCK,CHECK_CONSTRAINTS
</property>

并添加FIRE_TRIGGERS值,如迭戈所描述的那样。