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