2012-06-01 15 views
23

私は、トリガを持つテーブルにレコードを挿入するOLE DB宛先コンポーネントを持つSSISデータフロータスクを持っています。このテーブルに対して通常のINSERT文を実行すると、トリガーが起動します。 SSISタスクを通じてレコードを挿入すると、トリガーは起動しません。SSISによる挿入中にトリガーが起動しないのはなぜですか?

トリガをSSISで取得するにはどうすればよいですか?

答えて

45

OLE DB宛先タスクは一括挿入を使用するため、トリガーはデフォルトで起動されません。 BULK INSERT (MSDN)

FIRE_TRIGGERSが指定されていない場合、挿入トリガーは実行されません。

一つは、手動でその詳細エディタを介してOLE DBコンポーネントの一部としてFIRE_TRIGGERSを指定しなければなりません。

enter image description here

その後FastLoadOptions(オプションはカンマで区切られていることに注意)の値に "FIRE_TRIGGERS" を追加します。代わりにそのオプションに

enter image description here

、トリガーが発動すべきですタスクの実行中に

+0

ADO.Net接続を使用し、SQLデータベースでプログラム的に作業している場合、同様のオプションがありますか? – NealR

+0

@NealR:はい、[SqlBulkCopy](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx)を参照してください。 – ladenedge

+0

'OLE DB Destination'で、' Keep nulls'をチェックしておけば、トリガーも起動されません。 – MisterIsaak

14

補完的なラージエンゲージの答え。

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を追加します。

関連する問題