2

Я только установил SQL Server 2008R2, хотя мне нужно общаться с клиентами, имея 2005Является ли NOLOCK по умолчанию для операторов SELECT в SQL Server 2005?

[1] говорит:

  • "NOLOCK

    Это не блокирует любой объект. Это значение по умолчанию для операций SELECT. Оно не применяется к операторам INSERT, UPDATE и DELETE «

[2], похоже, не упоминает об этом, но моя проверка в SSMS/SS 2008R2 показывает, что nolock не является подсказкой по умолчанию для SELECT.

Is WITH (NOLOCK) действительно по умолчанию в SQL Server 2005 SELECT?
Где это написано на BOL2005/2008?


Update:
Под "Где написано" Я ожидал увидеть ответы/комментарии/пояснения (или, лучше, цитаты) на всех процитированных из [1] частей:

  • «Это не блокирует какой-либо объект»

    Выполняет ли SELECT без NOLOCK любые блокировки в SQL Server 2005 (с уровнем изоляции по умолчанию READ UNCOMMITTED)?
    ... в SQL Server 2008 (соответственно с READ COMMITTED)?

    То, что я прочитал на нем, можно понять, что NOLOCK позволяет игнорировать/обходить существующие блокировки, помещенные другой транзакцией ... но было совершенно неясно, ставит ли (или пытается поставить) текущую транзакцию (SELECT с NOLOCK) собственные замки ...

    ОЧЕНЬ НЕОБХОДИМО ОТНОСИТСЯ Уровень изоляции (который используется как синоним использования подсказки 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 Books Online. Table Hint (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187373(SQL.90).aspx

+0

Возможный дубликат [Указание блокировки по умолчанию на SQL Server 2005/2008] (http://stackoverflow.com/ Вопросы/3873076/default-table-lock-hint-on-sql-server-2005-2008) – gbn

ответ

2

Насколько я знаю, NOLOCK не является стандартным для операторов SELECT. Вам нужно указать конкретно, если вы хотите использовать NOLOCK с SELECT.

11

См duplicate

NOLOCK является не по умолчанию и не может быть установлен как таковой. Ссылка SQL Authority явно неверна.

+4

Ну, часть, которую он цитировал на странице SQL Authority, говорит, что NOLOCK является стандартным для выбранных операторов, но я бы сказал, что это неправильно. –

+1

@Damien_The_Unbeliever: Sh1te. Мне никогда не нравился этот сайт в любом случае – gbn

+0

Согласен - на этом сайте есть ошибки. –

-2

Нет, насколько я знаю, ROWLOCK является стандартным для операторов SELECT в NORMAL условиях. Используйте что-то вроде профилировщика SQL, чтобы подтвердить это. Очевидно, что различные другие обстоятельства изменят стратегию блокировки по умолчанию, например, находятся ли вы в режиме восстановления и уровнях изоляции и т. Д.

+0

-1 «rowlock» - это гранулярность и определяется двигателем. Это не уровень изоляции, как nolock – gbn

+0

Допинг жаль, что вы правы. – uriDium

Смежные вопросы