Ключевое слово SQL Server NOLOCK - PullRequest
1 голос
/ 21 января 2010

Когда клиент SQL выполняет следующую команду:

select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'

означает ли это, что команда не заблокирует tbl1 или , она не будет заблокирована другими незафиксированными транзакциями, выполненными для tbl1 ?

Обновление:

[NOLOCK]: указывает, что разрешено грязное чтение. Общие блокировки не выдаются для предотвращения изменения данных, считываемых текущей транзакцией, другими транзакциями, а эксклюзивные блокировки, установленные другими транзакциями, не блокируют текущую транзакцию от чтения заблокированных данных. REF: MSDN

Ответы [ 2 ]

4 голосов
/ 21 января 2010

означает первое; вы не снимаете никаких замков и поэтому второй; Вы не будете заблокированы другими открытыми транзакциями. См. Документы MSDN на табличных подсказках .

Вот ссылка на документы MSDN на уровнях изоляции транзакций - может быть полезно, если вы планируете использовать NOLOCK. NOLOCK переводит оператор SQL на уровень изоляции, считанный незафиксированным. Если у вас есть транзакция, состоящая из нескольких операторов, вы можете установить более низкий уровень изоляции для большей части транзакции и повысить его там, где это необходимо, а не понижать его только для одного или нескольких операторов в транзакции.

2 голосов
/ 21 января 2010

Оба. И он также будет считывать незафиксированные данные из других [незафиксированных] транзакций (если есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...