УСТАНОВИТЬ УРОВЕНЬ ТРАНЗАКЦИИ уровня 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 для повышения производительности.