質問

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

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top