次のような単純なストアド プロシージャがあるとします (注: これは単なる例であり、実用的な手順ではありません)。
CREATE PROCEDURE incrementCounter AS
DECLARE @current int
SET @current = (select CounterColumn from MyTable) + 1
UPDATE
MyTable
SET
CounterColumn = current
GO
1 つの行を含む「myTable」というテーブルがあり、「CounterColumn」には現在のカウントが含まれていると想定しています。
このストアド プロシージャを同時に複数回実行できますか?
つまり、これは可能ですか:
「incrementCounter」を 2 回呼び出します。呼び出し A は、「現在の」変数 (5 としましょう) を設定するポイントに到達します。呼び出し B は、「現在の」変数 (これも 5 になります) を設定するポイントに到達します。コール A の実行が終了すると、コール B が終了します。最終的に、テーブルには 6 の値が含まれているはずですが、実行のオーバーラップにより代わりに 5 が含まれています。