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