УСТАНОВИТЬ УРОВЕНЬ ТРАНЗАКЦИИ уровня READ незафиксирован - нужно ли явно использовать транзакцию начала и конца?

Работает ли этот запрос ниже или я явно использую транзакцию, являясь и заканчивая?

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

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() 

1 ответ

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

Смотрите больше здесь: С (NOLOCK) против УСТАНОВЛЕННОГО УРОВНЯ ИЗОЛЯЦИИ СДЕЛКИ ЧИТАЕТСЯ БЕЗ КОММИТИРОВАННЫЙ

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

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

Другие вопросы по тегам