Поделиться через


MSSQLSERVER_8632

Область применения: SQL Server

Сведения

Атрибут Значение
Название продукта SQL Server
ИД события 8632
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя QUERY_EXPRESSION_TOO_COMPLEX
Текст сообщения Внутренняя ошибка: был достигнут предел служб выражений. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить.

Описание

Ошибка 8632 возникает при выполнении запроса в SQL Server, содержащего большое количество идентификаторов и констант в одном выражении. Пользователю выводится сообщение об ошибке наподобие следующего:

Сервер: Msg 8632, level 17, State 2, Line 1
Внутренняя ошибка: был достигнут предел служб выражений. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить.

Причина

Эта проблема возникает, так как SQL Server ограничивает количество идентификаторов и констант, которые могут содержаться в одном выражении запроса. Превышение этого количества приводит к ошибке SQL Server (ошибка 8632). Например, следующий запрос содержит только одно выражение:

select a, b + c, d + e

Это выражение извлекает все пять столбцов, вычисляет операторы сложения и отправляет клиенту три спроецированных результата.

Тест на количество идентификаторов и констант выполняется после развертывания SQL Server всех ссылочных идентификаторов и констант. Например, могут развертываться следующие элементы:

  • звездочка (*) в списке выбора;
  • представление;
  • определение вычисляемого столбца.

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

Действие пользователя

Для обхода этой проблемы измените запрос. Используйте меньше идентификаторов и констант в самом большом выражении в запросе. Количество идентификаторов и констант в каждом выражении запроса не должно превышать ограничение. Для этого может потребоваться разбить запрос на несколько отдельных с временными промежуточными результатами.