「JFDI」パターンはどうですか?
BEGIN TRY
INSERT etc
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627
RAISERROR etc
END CATCH
真剣に、これは、特に大量の場合に、ロックなしで最も速く、最も同時に実行されます。UPDLOCKがエスカレートされ、テーブル全体がロックされた場合はどうなりますか?
レッスン4を読む:
レッスン4: インデックスを調整する前にupsertprocを開発するとき、私は最初に
If Exists(Select…)
を信頼しました lineはすべてのアイテムに対して起動し、重複を禁止します。灘。同じアイテムが同じミリ秒でアップサートにヒットし、両方のトランザクションが存在しないことを確認して挿入を実行するため、短時間で何千もの重複が発生しました。多くのテストを行った後、解決策は一意のインデックスを使用し、エラーをキャッチして、トランザクションが行を表示し、挿入の代わりに更新を実行できるようにすることでした。