Уровень изоляции SET TRANSACTION READ uncommitted - нужно ли явно использовать начало и конец транзакции?

Работает ли приведенный ниже запрос, или я должен явно использовать время и конец транзакции?

Да, я знаю опасность прочитанного незафиксированного

SET TRANSACTION isolation level READ uncommitted 

SELECT TOP 100 tblguilds.guild_id, 
               tblguilds.guildname, 
               tblguilds.leaderuserid, 
               tblusersprofile.username 
FROM   tblguilds 
       LEFT JOIN tblusersprofile 
              ON tblusersprofile.userid = tblguilds.leaderuserid 
WHERE  tblguilds.guild_id NOT IN (SELECT guildcode 
                                  FROM   tblguildapplied 
                                  WHERE  userid = 1) 
ORDER  BY Newid() 

person MonsterMMORPG    schedule 26.07.2016    source источник
comment
Я понимаю, что начало / конец транзакции вокруг выбора ничего не делает. Выборы вместе с обновлениями / вставками что-то делают, но выбор только внутри begin / end бессмысленно. Возможно, кто-то сможет это подтвердить.   -  person Nick.McDermaid    schedule 27.07.2016


Ответы (1)


Да, это сработает, но имейте в виду, что это будет действовать в течение всего сеанса. Это означает, что любой SQL, который вы выполняете после этого выбора, будет использовать этот уровень изоляции. Если вы хотите ограничить это определенными таблицами в select stmt, рассмотрите возможность использования подсказки NOLOCK

Подробнее см. Здесь: WITH (NOLOCK) vs SET TRANSACTION ISOLATION LEVEL ПРОЧИТАЙТЕ НЕПРЕРЫВНО

Транзакция Begin и фиксация (нет транзакции END) применимы только к вставке / обновлению / удалению

В качестве побочного примечания я бы изменил этот запрос, чтобы использовать левое внешнее соединение вместо NOT IN для повышения производительности.

person objectNotFound    schedule 27.07.2016
comment
так что мы можем сказать, что каждое соединение = каждый сеанс, верно? - person MonsterMMORPG; 28.07.2016
comment
@MonsterMMORPG да, но, чтобы быть технически точным, все, что работает в том же SPID, под которым был выполнен этот установленный уровень изоляции .... команда будет оставаться в силе до тех пор, пока этот SPID (соединение) не будет закрыто или уровень изоляции не будет явно сброшен / поменял на что-то другое. - person objectNotFound; 28.07.2016