Я был почти уверен, что вам нужно указать NOLOCK
для каждого JOIN
в запросе. Но мой опыт был ограничен SQL Server 2005.
Когда я посмотрел MSDN только для подтверждения, я не смог найти ничего определенного. Приведенные ниже утверждения, похоже, заставляют меня думать, что в 2008 году ваши два утверждения выше эквивалентны, хотя в 2005 году это не так:
[SQL Server 2008 R2]
Все подсказки блокировки распространяются на все таблицы и представления, к которым обращается план запроса , включая таблицы и представления, на которые имеются ссылки в представлении. Кроме того, SQL Server выполняет соответствующие проверки согласованности блокировки.
[SQL Server 2005]
В SQL Server 2005 все подсказки блокировки распространяются на все таблицы и представления, на которые имеются ссылки в представлении. Кроме того, SQL Server выполняет соответствующие проверки согласованности блокировки.
Кроме того, обратите внимание: это относится как к 2005, так и к 2008 году:
Подсказки к таблице игнорируются, если к плану запроса нет доступа к таблице. Это может быть вызвано тем, что оптимизатор решил вообще не обращаться к таблице, или потому что вместо этого осуществляется доступ к индексированному представлению. В последнем случае доступ к индексированному представлению можно предотвратить с помощью OPTION (EXPAND VIEWS)
подсказки запроса.