Есть способ узнать, прочитана ли моя строка зафиксирована или прочитана незафиксирована?

Я использую транзакцию READ UNCOMMITTED и хочу знать, зафиксирована ли конкретная строка или нет.


person Ricardo França    schedule 19.08.2015    source источник
comment
используйте этот DBCC USEROPTIONS WITH NO_INFOMSGS, он сообщит вам, какой уровень изоляции у вас есть в текущем сеансе. или даже DBCC USEROPTIONS в одиночку вы даете необходимую информацию   -  person M.Ali    schedule 19.08.2015
comment
@ M.Ali - я думаю, что этот вопрос задается построчно, а не по сеансам.   -  person MatBailie    schedule 19.08.2015
comment
хорошо, тогда вопрос неверен, у вас не может быть уровня изоляции Row-by-Row, уровень изоляции установлен для сеанса, любая работа, выполненная в этом конкретном сеансе, будет иметь тот же уровень изоляции, если не указана подсказка запроса, например, WITH (NO LOCK) и т. д.   -  person M.Ali    schedule 19.08.2015
comment
stackoverflow.com/questions/22245573   -  person wiretext    schedule 19.08.2015
comment
@MatBailie Вот в чем вопрос! Мне нужно по очереди.   -  person Ricardo França    schedule 19.08.2015
comment
@ М.Али, я думаю, ты прав. Я использовал DBCC USEROPTIONS, но, как вы сказали, это только по сеансу.   -  person Ricardo França    schedule 19.08.2015
comment
@tinka Я использую read uncommitted, чтобы получить более быстрый ответ, этот выбор будет накладным.   -  person Ricardo França    schedule 19.08.2015
comment
Нет, вы не можете узнать, и вы, вероятно, неправильно понимаете некоторые опасности использования read uncommitted, если вы думаете, что это так же просто, как фиксируемая строка или нет. Read uncommitted полностью пропустит строки, потенциально страницы, вернет дубликаты, вернет одну и ту же строку с разными данными или одну и ту же зафиксированную строку из двух моментов времени. Если вы достаточно хотите выяснить, является ли это грязным чтением или нет, используйте более подходящий уровень изоляции.   -  person GarethD    schedule 19.08.2015
comment
read uncommitted НЕ является уровнем изоляции, повышающим производительность. Он может возвращать данные быстрее, но за эту скорость приходится платить, и эта цена — точность. Лучшим подходом было бы исправить запрос и/или индексацию.   -  person Sean Lange    schedule 19.08.2015


Ответы (1)


Кажется, вам нужен вариант этого:

SELECT * FROM T WITH (READUNCOMMITTED)
EXCEPT
SELECT * FROM T WITH (READCOMMITTED, READPAST)

Это дает вам строки, которые в настоящее время видны только под READUNCOMMITTED.

Какой ужасный взлом. Пожалуйста, найдите другой способ написать ваше приложение. Это очень хрупко и трудно понять.

person usr    schedule 19.08.2015