同時実行エラーを防ぐために、すべての SQL 呼び出し (すべてストアド プロシージャ内) の SQL ステートメント (更新、挿入、アップサート、さらにはテーブルの読み取りなどのすべての crud 操作) をこれでラップすることにしました。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
begin tran--sqlstatements here
オプション (MAXDOP 1)
コミットトラン
私はパフォーマンスについて心配していないとだけ言っておきましょう。制約違反と、2 つ以上のスレッドが同時に同じデータベースにアクセスすることによって引き起こされるデッドロックを防ぎたいだけです。
これにより、競合状態から生じるすべてのデッドロックと制約の問題が効果的に取り除かれますか?
シリアル化可能なトランザクションで呼び出しを既にラップしている場合、CUD 関数に対して with (hold lock, update lock) を明示的に使用する必要がありますか?