У меня установлен только SQL Server 2008R2, хотя мне нужно общаться с клиентами, имеющими 2005 год.
[1] говорит:
[2], похоже, не упоминает об этом, но моя проверка в SSMS / SS 2008R2 показывает, что nolock не является подсказкой по умолчанию для SELECT.
Является ли WITH (NOLOCK) действительно значением по умолчанию в SQL Server 2005 SELECT?
Где это написано в BOL2005 / 2008?
Обновление:
В разделе «Где это написано» я ожидал увидеть ответы / комментарии / разъяснения (или, лучше, цитаты) по всем цитируемым из [1] частей:
«Это не блокирует любой объект»
Устанавливает ли SELECT без NOLOCK какие-либо блокировки в SQL Server 2005 (с уровнем изоляции по умолчанию READ UNCOMMITTED)?
... в SQL Server 2008 (соответственно с READ COMMITTED)?
Из того, что я прочитал, можно понять, что NOLOCK позволяет игнорировать / обходить существующие блокировки, установленные другой транзакцией ... но было совершенно неясно, помещает ли текущая транзакция (SELECT с NOLOCK) (или пытается установить) свою собственную замки ...
Означает ли уровень изоляции READ UNCOMMITTED (который используется как синоним для подсказки NOLOCK) отсутствие какой-либо блокировки?
"Это не относится к операторам INSERT, UPDATE и DELETE"
Вроде бы правильно?
Это потому, что они (INSERT, UPDATE и DELETE) всегда блокируются, а SELECT - нет?
и т. д.
[1]
http://blog.sqlauthority.com/2007/04/27/sql-server-2005-locking-hints-and-examples/
[2] * * тысяча пятьдесят-один
Электронная документация по SQL Server 2005. Подсказка к таблице (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187373(SQL.90).aspx