Я только что настроил SQL Server 2008 SP2 на моей рабочей станции для запуска локальной версии базы данных. Производственной базой данных является SQL Server 2008 R2. Коллега запускает SQL Server 2005 на своей рабочей станции.Ошибка от NOLOCK на CTE в SQL Server 2008 SP2
Моя БД выдает ошибку со следующим кодом, в то время как другие экземпляры одного и того же БД на других серверах запускают этот запрос без ошибок.
WITH Posts AS (
SELECT TOP 10 *
FROM TBL_MSG_LATEST (NOLOCK)
WHERE TBL_MSG_LATEST.STATUS = 1
)
SELECT * FROM Posts (NOLOCK)
... выдает эту ошибку:
Msg 215, Level 16, State 1, Line 6 Parameters supplied for object 'Posts' which is not a function. If the parameters are intended as a table hint, a WITH keyword is required.
Снятие (NOLOCK)
после Posts
делает мой DB счастливым.
Я не знаком с SQL Server, поэтому я не полностью понимаю CTE, но я считаю, что этот NOLOCK
может и не понадобиться здесь.
Однако мы не рады внесению изменений в кодовую базу, чтобы удовлетворить мою среду разработки.
Есть ли разница в конфигурации с моей более новой средой БД? Есть ли веская причина удалить NOLOCK
, который я не могу расшифровать из сообщения об ошибке?
без уважительной причины, NOLOCK, вероятно, должен использоваться только в таких случаях, как отчетность ... в противном случае вы могли бы читать незаданные данные ... –