Eu estive procurando alguns procedimentos armazenados em nosso sistema hoje quando vi a seguinte estrutura:
(pseudocódigo indicativo do SP real, o servidor está usando o nível de isolamento padrão):
CREATE PROCEDURE ...
AS
BEGIN
IF NOT EXISTS(SELECT ...)
BEGIN
RETURN;
END
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
DML...
DML...
DML...
COMMIT
END
Eu não vi o nível de isolamento da transação sendo declarado dentro de um limite de transação e queria saber qual era o efeito disso?
O nível de isolamento é restaurado depois que a transação é confirmada (portanto, se houvesse instruções adicionais após a confirmação - qual seria o nível de isolamento)?
Nesse caso, suponho que não haveria diferença se o nível de isolamento fosse declarado pouco antes do início da transação. É esse o caso?
Principalmente, fiquei um pouco surpreso ao ver isso, pois só vi o isolamento de transação declarado fora de uma transação, não dentro e estava me perguntando - por quê? Quais são os benefícios de fazê-lo.