2016-04-27 16 views
1

私はここで解決することを望む問題に直面しています。 DataSetに3つのテーブルがあり、データベーステーブルに挿入したいのですが。DataTable全体をデータベーステーブルに挿入/更新するC#

私はSqlBulkCopyを使用してこれを行うことができますが、キャッチがあり、データがデータベースに既に存在するかどうかを確認したい場合は、挿入する代わりに更新する必要があります。

データがデータベーステーブルに存在しない場合は、それを挿入します。これについての助けに感謝します。

私は各レコードを繰り返し処理して、それが存在するかどうかを確認するプロシージャを起動することができます。しかし、データサイズが膨大で、各レコードを繰り返し処理するのは時間がかかるので、私はこのアプローチを使用したくありません。

よろしく

+0

あなただけ**(1)**バルク(2)**データベース側で、あなたの実際のデータテーブルを更新する単一の実行中にSQL Serverでステージングテーブルにこれを挿入し、**はできません。サーバー上のT-SQLコードを使用してステージングテーブルから "これが存在しない場合は挿入ロジック"を実行しますか?それは、大規模なデータセットをローカルで反復処理し、いくつかの行だけを挿入するよりもはるかに速くなります。 –

+0

DataBaseで新しいテーブルを作成する権限がありません。 –

+0

.NETでreadコマンドとexecuteコマンドを実行することは、多くの理由で非効率的な場合があります。レコードの存在に応じて、チェックや挿入/更新などのSQL文を生成できます。しかし、これにより、操作が難しい可能性のある奇妙なテキストファイルが生成されます。 あなたは適切なSqlコマンド/文を生成することができるシンプルなC#アプリケーションを使用してIDを得ることができます。もう1つのオプションは、すべてのレコードを挿入し、後で更新するために主キーの例外をリッスンしようとしている可能性があります。 – ali

答えて

0

免責事項:私はこのプロジェクトはBulkInsert、BulkUpdate、bulkdeleteの、そしてBulkMerge(アップサート)することができますBulk Operations

プロジェクトの所有者です。

@marc_sが提案しているもの(ほとんどの場合、一時テーブルにSqlBulkCopyを使用し、主キーに応じて挿入または更新するマージステートメントを実行します)があります。

var bulk = new BulkOperation(connection); 
bulk.BulkMerge(dt); 
+0

うわーありがとう、私は推測する価値がある。 Lemmeそれをチェックして、それが完全に働くならupvoteしてください:)乾杯もう一度ありがとう。サイト上でBTWそれは試用だと言うので、それは何が構成されている制限は何ですか? –

+0

残念ながら、私たちはいくつかの無料の製品を持っていますが、この製品はPROバージョンしかありません(無料ではありません)。毎月新しい試用版が今月リリースされます。 –

+0

トライアルソフトウェアの制限事項は何ですか? –

関連する問題