DBCC CheckIdentでの一括挿入

batch-processing dbcc sqlbulkcopy sql-server sql-server-2008

質問

私たちのチームは、残酷な量のデータをSQL Server 2008データベースに挿入する必要があります。私たちは良い解決策を探しています。今私達は1つを思いついたが、それが正しいと感じないので、それに疑念がある。だから私はここでこれが良い解決策のように思われるかどうか尋ねています。余計な問題は、4台のサーバでピアツーピアの複製データベースだということです! :)

挿入する行が100万行あるとします

  1. トランザクションを開始する
  2. 1百万のテーブルで現在のident値を増やす
  3. DataSet / DataTableに100万行と正しいIDを用意する
  4. データをデータベースに一括コピーする
  5. トランザクションをコミットする

これは良い解決策ですか、並行処理の問題になるか、トランザクションが大きすぎるかなどです。

人気のある回答

データベースがオンラインで、ユーザーがそのテーブルに行を挿入できる場合は、問題が発生します(私が見る限り、間違っていることがあります)。メタレベルの新しい行のID値を増やすということは、システムによって挿入された次の行がその番号を使用することを意味します。したがって、100万でバンプすると、

アイデンティティ列は「nice」ですが、譲渡できないという副作用があります。したがって、データを別のDBに移行する必要がある場合は、挿入するデータに合わせて挿入するデータを調整する必要があることに気づくでしょう(これは、IDフィールドが既にテーブルにある行と衝突する可能性のあるデータの範囲です)。

これが1回限りの事件であれば、うまくいくかもしれません。これを定期的に行う予定がある場合は、データを新しいID値に移行するか、NEWSEQUENTIALID()でGUIDを使用するより高度な移行システムを調べて、適切なチェック済みインデックスと一意の譲渡可能なIDを取得します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ