SET TRANSACTION ISOLATION LEVEL level
SET TRANSACTION ISOLATION LEVEL ステートメントを使用すると、実行するプログラムに必要なデフォルトの分離レベルを設定できます。
SET TRANSACTION ISOLATION LEVEL ステートメントは、トランザクションが存在すると実行されません。 トランザクションが存在する場合に実行すると、ランタイム・エラー・メッセージが表示されてプログラムは失敗し、現在の実行環境で開始されまだコミットされていないトランザクションはロールバックされます。
level の構文は、次のとおりです。
{n | keyword | expression}
level は、0 から 4、または以下のキーワードのいずれか 1 つとして評価される式です。
| 整数 | キーワード | このトランザクションへの影響 |
| 0 | NO.ISOLATION | 更新の消失を防止します。1 |
| 1 | READ.UNCOMMITTED | 更新の消失を防止します。 |
| 2 | READ.COMMITTED | 更新の消失とダーティー・リードを防止します。 |
| 3 | REPEATABLE.READ | 更新の消失、ダーティー・リード、および繰り返し不能な読み取りを防止します。 |
| 4 | SERIALIZABLE | 更新の消失、ダーティー・リード、繰り返し不能な読み取り、およびファントム書き込みを防止します。 |
1ISOMODE 構成パラメーターが 1 または 2 に設定されている場合は、更新の消失は防止されます。
次の例では、デフォルトの分離レベルを 3 に設定した上で分離レベル 4 でトランザクションを開始します。トランザクションが終了すると分離レベルは 3 に戻ります。
SET TRANSACTION ISOLATION LEVEL REPEATABLE.READ
PRINT "We are at isolation level 3."
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE
PRINT "We are at isolation level 4."
COMMIT WORK
END TRANSACTION
PRINT "We are at isolation level 3"
次の例では、トランザクション・レベルを設定する式を使用します。
PRINT "Enter desired transaction isolation level:":
INPUT TL
SET TRANSACTION LEVEL TL
BEGIN TRANSACTION
.
.
.
END TRANSACTION