2

SSIS と BIDS を使用して、大量 (数百万) のレコードを含むテキスト ファイルを処理しています。一括挿入タスクを使用することにしましたが、うまく機能しましたが、挿入操作のデフォルト値を持つ追加の列が宛先テーブルに必要になり、一括挿入タスクが機能しなくなりました。その後、デフォルト値を持つ派生列と OleDB 変換先を使用してバルク データを挿入することにしました。最後の問題は解決しましたが、新しい問題が発生しました。OleDB 宛先にデータを挿入するときにエラーが発生した場合、完全なロールバックが実行され、テーブルに行が追加されませんでしたが、一括挿入タスクを使用すると、行は BatchSize 構成に基づいていました。サンプルで説明しましょう:

  • 5000 行のテキスト ファイルを使用します。ファイルには、行 3000 と 4000 の間に (意図的に) 重複した ID が含まれていました。
  • DTS を開始する前は、宛先テーブルは完全に空でした。
  • 一括挿入タスクを使用すると、エラーが発生した (そして DTS が停止した) 後、宛先テーブルには 3000 行ありました。BatchSize属性を 1000に設定しました。
  • エラーが発生した後、OleDB Destination を使用すると、宛先テーブルに 0 行がありました。Rows per batch属性を 1000に設定し、 Maximum insert commit sizeを最大値の 2147483647 に設定しました。最後の値を 0 に変更しようとしましたが、効果はありませんでした。

これは OleDB Destination の通常の動作ですか? これらのタスクの操作に関するガイドを提供してもらえますか? これらのタスクを使用するのを忘れて、T-SQL からの一括挿入を使用する必要がありますか?

補足として、一括インポート中に Null を保持するか、デフォルト値を使用する (SQL Server) の指示に従って、KEEPNULLSOleDB Destinationタスクを使用しないようにしましたが、うまくいきませんでした (私だけかもしれません)。


編集:問題に関する追加情報。

テーブル構造(サンプル)

タブレット

id int, name varchar(50), processed int default 0

CSVファイル(サンプル)

1, hello
2, world
4

2 に答える 2

1

バルクインサートにはロールバックがないため、高速です。


フォーマットファイルの使用をご覧ください:http: //msdn.microsoft.com/en-us/library/ms179250.aspx

于 2012-08-31T16:29:30.433 に答える
0

これを SSISのトランザクションに配置する可能性があります ( MSDTC を実行する必要があります)。または、 try-catchを使用して T-SQL スクリプトを作成し、一括挿入の例外を処理することもできます (おそらくロールバックまたはコミットのみ)。

于 2012-08-31T17:01:39.963 に答える