SQL Server: как установить уровень изоляции по умолчанию для всей хранимой процедуры? - PullRequest
11 голосов
/ 02 ноября 2011

Если сразу после BEGIN у меня есть оператор SET TRANSACTION ISOLATION LEVEL ..., будет ли данный уровень транзакции действовать для всей области действия хранимой процедуры независимо от того, использую я BEGIN TRANSACTION или нет?А именно, если у меня есть простые операторы SELECT, которые по определению атомарны / обрабатываются, будет ли для них установлен уровень транзакции по умолчанию равным данному?

BEGIN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
 -- will a transaction level for a atomic transaction created by SQL Server for this statement be READ COMMITTED 
SELECT * FROM T
END

1 Ответ

11 голосов
/ 02 ноября 2011

Во-первых, уровнем изоляции по умолчанию в SQL Server является Read Committed, так что оператор на самом деле ничего не делает, если вы не изменили уровень изоляции по умолчанию.

Но, в общем, да, SET Transaction Isolation Level изменит уровень изоляции для всей процедуры (фактически, продолжительность соединения)

Имейте в виду, что все операторы SQL являются неявными транзакциями, что означает, что, например, если обновление завершится неудачно на 99%, оно будет автоматически откатываться; нет BEGIN TRAN/COMMIT необходимо.

Чтобы ответить на ваш вопрос, да, ваши операторы SELECT наследуют заданный вами уровень изоляции (или уровень по умолчанию, если вы его не устанавливаете), если вы не переопределите поведение с помощью подсказки запроса, такой как WITH NOLOCK, которая сделает отдельный запрос ведите себя так, как будто вы SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

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