私は、データベースのいくつかの条件をチェックし、フラグの結果を返すだけのユーティリティ手続きを持っています。これらのプロシージャーは、READ UNCOMMITTED分離レベル(WITH NOLOCKと同等)で実行されます。あるストアドプロシージャ内から、より低いトランザクション分離レベルを設定する別のストアドプロシージャを呼び出すことはできますか?
また、SERIALIZABLE分離レベルで実行されるより複雑な手順もあります。彼らはまた、同じ種類の小切手を持っていることもあります。
私は、チェックコードを複製するのではなく、これらの複雑な手順からこれらのチェック手順を呼び出すことにしました。
は、基本的には次のようになります。
CREATE PROCEDURE [dbo].[CheckSomething]
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
-- Do checks
COMMIT TRANSACTION
と
CREATE PROCEDURE [dbo].[DoSomethingImportant]
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
EXECUTE [dbo].[CheckSomething]
-- Do some work
COMMIT TRANSACTION
は、それを行うには大丈夫でしょうか?一時的に活性化された低いアイソレーションレベルは、何らかの理由でより高いレベルの保護を破るか、または完全に安全なものですか?
EDIT:エラーはスムーズに実行されます。
明確化のおかげで、これを過去にしたとき、私はストアドプロシージャの外にあったので、動作はdifferen t –