Подтвердить что ты не робот

С (nolock) или (nolock) - Есть ли разница?

Все основано на предположении, что с (nolock) полностью подходит для ситутации. Там уже много вопросов, обсуждающих, использовать или не использовать (nolock).

Я огляделся и не смог найти, существует ли реальная разница между использованием with(nolock):

select customer, zipcode from customers c with(nolock) 

или просто (nolock):

select customer, zipcode from customers c (nolock) 

Есть ли функциональная разница между этими двумя? Стилистические?
Является ли кто-то старше другого и может быть устаревшим?

4b9b3361

Ответ 1

Нет функциональной разницы, но в конечном итоге синтаксис без WITH не будет работать. Это устарело:

select customer, zipcode from customers c (nolock) 

Итак, вы должны использовать этот формат:

select customer, zipcode from customers c with (nolock) 

Не использовать ключевое слово WITH для подсказок таблицы было устарело, поскольку, по крайней мере, SQL Server 2008. Искать следующий раздел для фразы Specifying table hints without using the WITH keyword.:

http://msdn.microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(Обсуждения о том, должны ли вы использовать nolock вообще, конечно, раздельны. Я написал о них здесь. )

Ответ 2

Хотя мы не находим разницу между (nolock) и с (nolock)... с (nolock) не будет работать в версии SQL Server 2000.

И я также заметил, что когда вы пытаетесь извлечь данные со связанных серверов, просто "(nolock)" не будет работать, тогда как вы должны использовать "с (nolock)".

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock)

-- this will  work 
select * from server1.DB1.dbo.table1 with (nolock)

Ответ 3

Это действительно зависит от того, на какой версии SQL Server вы находитесь.

Проверка последней документации для SQL Server 2012 подсказки таблицы omitting WITH - устаревшая функция. Поэтому, хотя from customers c (nolock), вероятно, будет работать; вы действительно должны использовать from customers c WITH (nolock)

Обратите внимание, что это отличается от from customers nolock; где nolock будет служить псевдонимом таблицы.

Функционально; они кажутся одинаковыми.

Ответ 4

Я попробовал это для получения результата в 170000+ строк данных, однако я не видел никакой разницы в плане выполнения запроса. Оба работают одинаково.