【发布时间】:2012-06-06 08:05:25
【问题描述】:
我有一个带有 OLE DB 目标组件的 SSIS 数据流任务,该组件使用触发器将记录插入到表中。当我对该表执行正常的INSERT 语句时,触发器会触发。当我通过 SSIS 任务插入记录时,触发器不会触发。
如何在 SSIS 中触发触发器?
【问题讨论】:
标签: sql triggers ssis bulkinsert
我有一个带有 OLE DB 目标组件的 SSIS 数据流任务,该组件使用触发器将记录插入到表中。当我对该表执行正常的INSERT 语句时,触发器会触发。当我通过 SSIS 任务插入记录时,触发器不会触发。
如何在 SSIS 中触发触发器?
【问题讨论】:
标签: sql triggers ssis bulkinsert
由于 OLE DB 目标任务使用批量插入,默认情况下不会触发触发器。来自BULK INSERT (MSDN):
如果未指定 FIRE_TRIGGERS,则不执行插入触发器。
必须通过其高级编辑器手动将 FIRE_TRIGGERS 指定为 OLE DB 组件的一部分。
然后将“FIRE_TRIGGERS”添加到FastLoadOptions的值(注意选项是逗号分隔的):
使用该选项,触发器应在任务执行期间触发。
【讨论】:
OLE DB Destination,如果你选中了Keep nulls,你的触发器也不会被触发。
补充 ladenedge 的回答。
因为 OLE DB 目标任务使用批量插入,所以触发器是 默认不触发
当您选择了“快速加载”选项时,这是正确的。
如果您将其更改为常规的“表或视图”数据访问模式,您的触发器应该会正常触发,因为插入是逐行完成的
【讨论】:
您可以在不使用 SQL Server Data Tool for Visual Studio 的情况下通过记事本(或任何其他文本编辑器)编辑 dtsx 文件来执行此操作。
搜索以下属性:
<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,正如 Diego 已经描述的那样。
【讨论】: