J'ai un tas de procédures utilitaires qui vérifient simplement certaines conditions dans la base de données et retournent un résultat de drapeau. Ces procédures sont exécutées avec le niveau d'isolation READ UNCOMMITTED, équivalent à WITH NOLOCK.Est-il acceptable si, à l'intérieur d'une procédure stockée, j'appelle une autre procédure qui établit un niveau d'isolation de transaction inférieur?
J'ai également des procédures plus complexes qui sont exécutées avec le niveau d'isolation SERIALIZABLE. Ils ont aussi le même genre de vérifications. J'ai donc décidé d'appeler ces procédures de vérification à partir de ces procédures complexes au lieu de répliquer le code de vérification.
Fondamentalement, il ressemble à ceci:
CREATE PROCEDURE [dbo].[CheckSomething]
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
-- Do checks
COMMIT TRANSACTION
et
CREATE PROCEDURE [dbo].[DoSomethingImportant]
AS
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
EXECUTE [dbo].[CheckSomething]
-- Do some work
COMMIT TRANSACTION
Serait-il correct de faire cela? Est-ce que le niveau d'isolation inférieur temporairement activé brise en quelque sorte la protection de niveau supérieur ou tout est-il parfait en toute sécurité?
EDIT: L'exécution se passe sans problème.
Merci pour la clarification, quand je l'ai fait dans le passé, j'étais en dehors d'un proc stocké donc le comportement était différent t –