Уровень транзакций SQL Server 2005 и хранимые процедуры - PullRequest
2 голосов
/ 22 сентября 2011

Если я использую команду SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED и затем выполняю хранимую процедуру, используя EXEC storedProcedureName в том же контексте, будет ли хранимая процедура использовать уровень транзакции, указанный ранее, или будет использовать уровень по умолчанию?

Если я хочу принудительно использовать каждую хранимую процедуру на уровне транзакции, нужно ли в верхней части кода включать одно и то же выражение (SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED)?

PS .: система построена на основе .NET 2.0 и проприетарных сторонних продуктов с ограничениями, поэтому необходимы эти обходные пути.

1 Ответ

10 голосов
/ 22 сентября 2011

Хранимая процедура будет использовать изоляцию транзакции, действующую при вызове.

Если хранимая процедура сама устанавливает явный уровень изоляции, он будет сброшен при выходе из хранимой процедуры.

(Edit: только что отмечен, и это вопреки тому, что BOL говорит"... оно остается установленным для этого соединения, пока оно не будет явно изменено", но это видно из приведенного ниже)

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

Результаты

ReadUncomitted
Enter: SetRCTransLevel
Readcomitted
Exit: SetRCTransLevel
ReadUncomitted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...