毎晩、ODBC ソースから SQL Server 2005 テーブルに 800 万を超えるレコードを入力する必要があります。現在、次のような構文 select を使用して、リンク サーバーから挿入ステートメントを使用しています。
Insert Into SQLStagingTable from Select * from OpenQuery(ODBCSource, 'Select * from SourceTable')
これは非常に非効率的で、実行に数時間かかります。この質問にあるコードと同様の SqlBulkInsert コードを使用してソリューションをコーディングしている最中です。
その質問のコードは、最初にメモリにデータ テーブルを設定し、次にそのデータ テーブルを SqlBulkInserts WriteToServer メソッドに渡します。
移入されたデータテーブルが、実行中のマシン (私の場合は 16GB のメモリを搭載したサーバー) で使用できるよりも多くのメモリを使用している場合はどうすればよいですか?
x から n までのレコードのみを埋めることができるオーバーロードされた ODBCDataAdapter fillメソッドを使用することを考えました (x は開始インデックス、n は埋めるレコードの数です)。ただし、ソースでselectステートメントを何度も再実行することを意味するため、現在持っているソリューションよりもさらに遅いソリューションになる可能性があります。
私は何をすべきか?すべてを一度に実装して、OS にメモリを管理させますか? チャンクで入力する必要がありますか?私が考えていない別の解決策はありますか?