動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
SQL

並列実行時のロストアップデート — 3 パターン共通の落とし穴

出典: SQL Server UPDATE … FROM SELECT 3パターン — 業務SE が JOIN / CTE / MERGE を本番で使い分ける判断軸並列実行時のロストアップデート — 3 パターン共通の落とし穴

並列実行時のロストアップデート — 3 パターン共通の落とし穴 (sql)#785286e63e10
-- (a) 範囲ロックを早めに取る (UPDATE 1 文で完結する場合)
UPDATE T1 WITH (UPDLOCK, HOLDLOCK)
SET status = 'fixed'
FROM T1 INNER JOIN ... ON ...
WHERE ...;
 
-- (b) 名前付き排他ロックで完全直列化 (修正バッチが複雑な場合)
BEGIN TRAN;
EXEC sp_getapplock @Resource = 'fix_t1_status_batch', @LockMode = 'Exclusive', @LockTimeout = 60000;
-- ここで複数 UPDATE / SELECT 検証を流す
COMMIT;
-- sp_getapplock は COMMIT 時に自動解放
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #785286e63e10
  • lines: 12
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「並列実行時のロストアップデート — 3 パターン共通の落とし穴」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

4
図鑑トップ