3

SQL サーバー DB に一括アップロードしようとしています。ソース ファイルには削除したい重複があるため、操作によって最初のファイルが自動的にアップロードされ、残りは破棄されることを期待していました。(一意のキー制約を設定しました)。問題は、重複アップロードが試行された瞬間にすべてが失敗し、ロールバックされることです。SQLに続行するように指示する方法はありますか?

4

3 に答える 3

7

データを一時テーブルに一括挿入してから、@madcolor が提案したように SELECT DISTINCT を試行するか、

INSERT INTO yourTable
SELECT * FROM #tempTable tt
WHERE NOT EXISTS (SELECT 1 FROM youTable yt WHERE yt.id = tt.id)

またはWHERE句の他のフィールド。

于 2009-09-14T16:28:49.910 に答える
1

SQL Plus、DBVis、Toad などの SQL ツールを使用してこれを行っている場合は、そうではないと思います。これをプログラム的に言語で行っている場合は、分割して征服する必要があります。行ごとに更新を実行し、各例外をキャッチするのは非常に長いプロセスになると思われるため、代わりに最初に SQL ブロック全体でバッチ操作を実行し、失敗した場合は前半で実行し、それが失敗した場合は、前半の前半でやる。成功するブロックができるまで、この方法を繰り返します。ブロックを破棄し、残りの SQL で同じ手順を実行します。制約に違反するものはすべて、ログに記録して破棄することがわかっている唯一の SQL ステートメントとして最終的に終了します。これは、無効な行を捨てながら、可能な限り多くの一括処理でインポートする必要があります。

于 2009-09-14T16:30:16.333 に答える
0

これには SSIS を使用します。重複をスキップするように指示できます。ただし、最初にそれらが真の重複であることを確認してください。一部の列のデータが異なる場合、どのレコードを保持するのが適切かをどのように判断しますか?

于 2009-09-14T17:25:00.030 に答える