2012-08-29 7 views
9

DataTableを通過する 'WriteToServer'メソッドを呼び出すC#SqlBulkCopyクラスについてよく知っています。SqlBulkCopyの動作方法

私の質問は、SQL Serverの基本的なメカニズムがそのデータをバルク挿入するために使用されていることです。

私が尋ねる理由は、Bulk Insert MSDN T-SQLヘルプファイルで参照されているバルク挿入にデータファイルをインポートする必要があるためです。 SqlBulkCopyはデータファイルを作成しますか?

SQLでバルク挿入機能を使用できるかどうかは、この問題を理解したいと思います。

特定のテーブル(何千もの行)に挿入するすべての行を準備するSQL文を書き込むと、それらを一括してデスティネーションテーブルに挿入できますか?このような何かが、私は今それをやっている方法を

INSERT INTO sync_filters (table_name, device_id, road_id, contract_id) 
    SELECT * FROM dbo.sync_contract_filters (@device_id) 

され、dbo.sync_contract_filters挿入するために、すべての行を生成する機能です。これは一括挿入できますか?

答えて

8

SqlBulkCopyはデータファイルを作成しません。使用可能な通信プロトコル(名前付きパイプ、TCP/IPなど)を使用して.Net DataTableオブジェクトからサーバーに直接データテーブルをストリーミングし、BCPで使用されているのと同じ手法を使用してデータを一括してデスティネーションテーブルに挿入します。

+0

私が興味を持っているのは、特定のテーブルに必要な行を作成し、一括して挿入するSQL文を作成することです(これは完全にSQLを使用しています)。 BCPでこれを行うことはできますか?私はbcpもテーブルを使用しているという印象を受けました。 – peter

2

SqlBulkCopyは、datatable、IDataReaderまたはDataRow []をデータソースとして使用できます。クラスのWriteToServerメソッドを見てください。私はそれがSQL Serverにデータを取得するための非常に便利なメカニズムであることを発見しました。私は前にCSVReaderと併用しています。前のリンクは、IDataReaderを実装するクラスでどのように動作するかを示しています。

あなたが期待しているパフォーマンスを確実に得るためには、play around with the batch sizesが必要な場合があります。

The Data Loading Performance Guideは、大量のデータをすばやく作成することで最高のパフォーマンスを得ることを検討している場合は、非常に便利なリソースです。それはBCPやBULK INSERTのようなものに焦点を当てていますが、SQLBulkCopyに触れていますし、思考のための食べ物もたくさんあります(多少は多すぎますが、とにかく参考になるでしょう)。