これはSQLServer用です。
各ステートメントはアトミックですが、ストアドプロシージャをアトミック(または一般的なステートメントのシーケンス)にする場合は、ステートメントを明示的に
で囲む必要があります。
トランザクションの開始
ステートメント...
ステートメント...
トランザクションのコミット
(略してBEGINTRANとENDTRANを使用するのが一般的です。)
もちろん、同時に起こっていることによっては、ロックのトラブルに巻き込まれる方法はたくさんあるので、失敗したトランザクションに対処するための戦略が必要になる場合があります。 (この特定のSPをどのように考案したとしても、ロックが発生する可能性のあるすべての状況について完全に説明することは、質問の範囲を超えています。)ただし、原子性のため、ロックは再送信可能です。そして、私の経験では、トランザクション量やデータベース上の他のアクティビティについて知らなくても、おそらく大丈夫でしょう。当たり前のことを言ってすみません。
一般的な誤解とは異なり、これはデフォルトのトランザクションレベル設定で機能します。