web-dev-qa-db-ja.com

あるテーブルから別のテーブルにバッチでデータを移動する

テーブルが1800万レコードあるため、追加する必要があります(同じ構造の)別のテーブルに追加します。インポート/エクスポートウィザードを試してみました。問題は、ログが非常に大きくなり、最終的にサーバー全体がダウンすることです。途中でプロセスを終了する必要がありました。

バッチでやればもっと速くなると思いますが、どうすればいいのかわかりません。

(古いテーブルは必要ありません。コピーされたレコードは削除できます)

編集:一括挿入はすべての操作をブロックしますが、ここで全員をブロックするのを防ぐ方法はありますか? enter image description here

2
Ezi
while (1=1)
begin
    delete top(10000) from oldtable
       output deleted.columnA, deleted.columnB, deleted.columnC
       into newtable (columnA, columnB, columnC)
    if @@ROW_COUNT = 0
       break;
end
6
Remus Rusanu

最も簡単な方法は、おそらくBIDSを開き、手動でデータ変換を作成することです。高速ロードの宛先をセットアップします(データを一括挿入します)。次に、バッチサイズを1000に変更します。次に、パッケージを実行します。

1
mrdenny