Запрос работает в некоторых базах данных, но не в других. Похоже, что проблема разбора запроса связана с вложенными функциями. Есть идеи почему? - PullRequest
2 голосов
/ 09 августа 2011

У меня есть следующий запрос SQL Server 2008, который работает для всех моих баз данных (50+), кроме одной.Этот запрос должен опираться только на функции системного уровня, поэтому он должен выполняться в любой базе данных SQL Server.Все мои базы данных находятся на одном сервере, так что это не проблема сервера, а проблема с одним экземпляром базы данных.

SELECT *
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) AS istats
WHERE avg_fragmentation_in_percent > 20

В ошибочной базе данных появляется следующая ошибка.

Msg102, Уровень 15, Состояние 1, Строка 2 Неверный синтаксис рядом с '('.

Следующие два запроса работают нормально.

SELECT *
FROM sys.dm_db_index_physical_stats(72, NULL, NULL, NULL, NULL) AS istats           
WHERE avg_fragmentation_in_percent > 20


select DB_ID()

Итак, похоже, проблема в том, что SQL Serverимеет при разборе запроса только в этой конкретной базе данных. Кто-нибудь знает, что может вызвать это?

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Убедитесь, что ваш уровень совместимости одинаков для всех баз данных.Бьюсь об заклад, те, где этот синтаксис не работает, установлены на значение меньше 100. Вы можете проверить уровень совместимости базы данных с помощью следующего запроса:

ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = x;

Тем не менее, эти базы данных могут быть в более низком сравненииуровень по выбору, и это может быть не самая лучшая идея, просто обновить их.Чтобы обойти эту проблему, вы также можете попробовать:

DECLARE @DB INT = DB_ID();
SELECT * FROM sys.function...(@DB, ...);
2 голосов
/ 09 августа 2011

Проверьте уровень совместимости в проблемной базе данных. Я только что попробовал ваш запрос к базе данных после установки уровня совместимости для SQL Server 2000 со следующим.

ALTER DATABASE Junk
SET COMPATIBILITY_LEVEL = 80

Я получил ту же ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...