sql >> Base de Datos >  >> RDS >> Sqlserver

Nivel de transacción y procedimientos almacenados de SQL Server 2005

El procedimiento almacenado utilizará el aislamiento de transacción vigente cuando se le llame.

Si el propio procedimiento almacenado establece un nivel de aislamiento explícito, este se restablecerá cuando finalice el procedimiento almacenado.

(Editar:Acabo de comprobar y esto es contrario a lo que dice BOL "... permanece configurado para esa conexión hasta que se cambie explícitamente", pero se puede ver a continuación)

CREATE PROC CheckTransLevel
AS
DECLARE @Result varchar(20)

SELECT @Result = CASE transaction_isolation_level 
                        WHEN 0 THEN 'Unspecified' 
                        WHEN 1 THEN 'ReadUncomitted' 
                        WHEN 2 THEN 'Readcomitted' 
                        WHEN 3 THEN 'Repeatable' 
                        WHEN 4 THEN 'Serializable' 
                        WHEN 5 THEN 'Snapshot' 
                  END 
FROM sys.dm_exec_sessions 
WHERE session_id = @@SPID

PRINT @Result

GO
CREATE PROC SetRCTransLevel
AS
PRINT 'Enter: SetRCTransLevel'
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
EXEC CheckTransLevel
PRINT 'Exit: SetRCTransLevel'
GO

SET NOCOUNT ON

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

EXEC CheckTransLevel

EXEC SetRCTransLevel

EXEC CheckTransLevel

Resultados

ReadUncomitted
Enter: SetRCTransLevel
Readcomitted
Exit: SetRCTransLevel
ReadUncomitted