質問: 私たちはCLRプロシージャでメモリ内のDataTableを持っています。重要な処理の後、DataTableには、データベース内のテーブルにロードする必要がある多くのデータがあります。残念ながら、 コンテキスト接続を使用しているため、SqlBulkCopyは機能しません(エラーをスローします: *要求された操作は* 、コンテキスト制限の *コンテキスト接続の* 概要で *は使用できません* )。 追加の通常の接続を構築し、それを使ってSQLBulkCopyを実行することを考えています。これは、コンテキスト接続を介して通常の接続を使用するオーバーヘッドを考えれば、むしろばかげているようです。私たちは、DataTableの行を繰り返し処理し、それぞれのレコードを挿入することを考えましたが、サイズが大きく、SQLBulkCopyがより適しているようです。 私たちはDataTableと結婚しておらず、膨大な量のデータをCLRプロシージャからデータベースに挿入する最良の方法を探しています。 DataTableの最終的な注記は、基礎となるデータベーステーブルを表しますが、DataSetまたはTableAdapterを介してテーブルに関連付けられていません。 CLR手順でこれを行う方法はすぐには分かりませんでした。これを行い、AcceptChangesメソッドまたはUpdateメソッドを使用することは、容認できる解決策になります。
回答: 私はSQLBulkCopyがテーブルサイズに応じて挿入を行うよりも10-100倍速くなると見積もっています。 間違いなく時間とリソースを必要とするあなたのDataTable上で「重要な処理」を行っているのを見て、コンテキスト接続の代わりに完全な接続を使用するか、まったく新しい接続を開くのにかかるわずかなオーバーヘッドは、 。