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

Использование С помощью таблицы NOLOCK Подсказка в запросе с использованием представления - распространяется ли оно внутри представления?

Если подсказка запроса "WITH NOLOCK" используется в представлении в SQL Server, распространяет ли этот намек на само определение представления, даже если NOLOCK НЕ используется для необработанных таблиц в определении представления? Причина в том, что иногда сотрудники службы поддержки хотят делать огромные трудоемкие запросы, но скорее не будут вынуждать эту блокировку по всем запросам, используя представление внутри самого приложения.

4b9b3361

Ответ 1

Да, NOLOCK будет распространяться на таблицы, используемые определением вида (по крайней мере, в SQL Server 2005).

Смотрите Табличные подсказки в MSDN:

В SQL Server 2005 все подсказки блокировки распространяются на все таблицы и представления, на которые ссылаются в представлении. Кроме того, SQL Server выполняет соответствующие проверки согласованности блокировок.

Однако

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

Если вы используете индексированные представления, вы можете прочитать немного больше, так как есть и некоторые специальные случаи.

Также см. Просмотр разрешения для получения дополнительной информации.

Ответ 2

Просто чтобы дополнить Рори отличным ответом.

Он пишет: "Да, NOLOCK будет распространяться на таблицы, используемые определением вида (по крайней мере, в SQL Server 2005).

Фактически это будет работать и в SQL 2000. От BOL:

Поскольку select_statement использует оператор SELECT, он действителен для использования и подсказок, как указано в предложении FROM. Для получения дополнительной информации см. FROM и SELECT.