Это, похоже, характерно для синтаксиса CTE.Добавление «WITH» не изменит работу NOLOCK;он просто позволит работать.
С подсказками NOLOCK в CTE они оба работают:
WITH Posts AS (
SELECT ... FROM TBL_MSG_LATEST NOLOCK
)
SELECT * FROM Posts NOLOCK;
WITH Posts AS (
SELECT ... FROM TBL_MSG_LATEST WITH (NOLOCK)
)
SELECT * FROM Posts WITH (NOLOCK);
, но это не удается:
WITH Posts AS (
SELECT ... FROM TBL_MSG_LATEST (NOLOCK)
)
SELECT * FROM Posts (NOLOCK);
Все они работают за пределами CTE:
SELECT ... FROM TBL_MSG_LATEST NOLOCK;
SELECT ... FROM TBL_MSG_LATEST (NOLOCK);
SELECT ... FROM TBL_MSG_LATEST WITH (NOLOCK);
Правильный синтаксис: "WITH (NOLOCK)".
Но ... если выпомещая NOLOCK в CTE, почему вы также помещаете его в SELECT?
Обратите внимание, что результаты в Denali CTP3 одинаковы.