2012-06-01 49 views
23

我有一個帶有OLE DB Destination組件的SSIS數據流任務,該組件使用觸發器將記錄插入表中。當我對該表執行正常的INSERT聲明時,觸發器會觸發。當我通過SSIS任務插入記錄時,觸發器不會觸發。爲什麼我的觸發器在通過SSIS插入期間觸發?

如何在SSIS中觸發觸發?

回答

45

因爲OLE DB目標任務使用批量插入,所以默認情況下觸發器不會被觸發。從BULK INSERT (MSDN)

如果未指定FIRE_TRIGGERS,則不執行插入觸發器。

一個必須手工指定FIRE_TRIGGERS通過其高級編輯器中的OLE DB組件的一部分。

enter image description here

然後 「FIRE_TRIGGERS」 添加到的FastLoadOptions值(注意,選項是逗號分隔):

enter image description here

有了這一選項,觸發器應該解僱任務執行期間。

+0

是否有類似的選項,如果他們正在使用和ADO.Net連接和編程SQL數據庫上工作? – NealR

+0

@NealR:是的,請參閱[SqlBulkCopy](http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlbulkcopy.aspx)。 – ladenedge

+0

我只想添加'OLE DB Destination',如果你有'Keep nulls'選項,你的觸發器也不會被觸發。 – MisterIsaak

14

補充lagentge的答案。

因爲OLE DB目標任務使用批量插入,觸發器 默認情況下不

當你擁有了「快速加載」選項選擇是真的被解僱。

enter image description here

如果將其更改爲普通的「表或視圖」數據訪問模式,你的觸發器應該因爲插入完成一行一行地

+0

通常,您正在使用批量加載,因爲您的數十萬行太慢而無法逐行操作,很多人會發現這不是最佳解決方案。 –

0

你可以做到這一點,而不使用通常火通過用記事本(或任何其他文本編輯器)編輯dtsx文件,Visual Studio的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迭戈已經描述。