MSSQLSERVER_8632MSSQLSERVER_8632

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions)

СведенияDetails

attributeAttribute ЗначениеValue
Название продуктаProduct Name SQL ServerSQL Server
Идентификатор событияEvent ID 86328632
Источник событияEvent Source MSSQLSERVERMSSQLSERVER
КомпонентComponent SQLEngineSQLEngine
Символическое имяSymbolic Name QUERY_EXPRESSION_TOO_COMPLEXQUERY_EXPRESSION_TOO_COMPLEX
Текст сообщенияMessage Text Внутренняя ошибка: был достигнут предел служб выражений.Internal error: An expression services limit has been reached. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить.Please look for potentially complex expressions in your query, and try to simplify them.

ОбъяснениеExplanation

Ошибка 8632 возникает при выполнении запроса в экземпляре SQL ServerSQL Server, который содержит большое количество идентификаторов и констант в одном выражении.Error 8632 is raised when you run a query in SQL ServerSQL Server that contains a large number of identifiers and constants in a single expression. Пользователю выводится сообщение об ошибке наподобие следующего:An error message like the following is reported to the user:

Сервер: Сообщение 8632, уровень 17, состояние 2, строка 1Server: Msg 8632, Level 17, State 2, Line 1
Внутренняя ошибка: был достигнут предел служб выражений.Internal error: An expression services limit has been reached. Проверьте потенциально сложные выражения в запросе и постарайтесь их упростить.Please look for potentially complex expressions in your query, and try to simplify them.

ПричинаCause

Эта ошибка возникает, потому что в SQL ServerSQL Server есть ограничение на количество идентификаторов и констант, которые могут содержаться в одном выражении запроса.This issue occurs because SQL ServerSQL Server limits the number of identifiers and constants that can be contained in a single expression of a query. Превышение этого количества приводит к ошибке SQL Server (ошибка 8632).This limit is 65,535. Например, следующий запрос содержит только одно выражение:For example, the following query only has one expression:

select a, b + c, d + e

Это выражение извлекает все пять столбцов, вычисляет операторы сложения и отправляет клиенту три спроецированных результата.This expression retrieves all five columns, calculates the addition operators, and sends three projected results to the client.

Проверка числа идентификаторов и констант выполняется после того, как SQL ServerSQL Server развертывает все упоминаемые идентификаторы и константы.The test for the number of identifiers and constants is performed after SQL ServerSQL Server expands all referenced identifiers and constants. Например, могут развертываться следующие элементы:For example, the following items may be expanded:

  • звездочка (*) в списке выбора;The asterisk (*) in the select list
  • представление;A view
  • определение вычисляемого столбца.A computed column definition

Если число идентификаторов и констант после развертывания превышает ограничение, выполнить запрос невозможно.If the number after the expansion exceeds the limit, the query cannot run.

Рекомендуемые действияUser action

Для обхода этой проблемы измените запрос.To work around this issue, rewrite your query. Используйте меньше идентификаторов и констант в самом большом выражении в запросе.Reference fewer identifiers and constants in the largest expression in the query. Количество идентификаторов и констант в каждом выражении запроса не должно превышать ограничение.You must make sure that the number of identifiers and constants in each expression of the query does not exceed the limit. Для этого может потребоваться разбить запрос на несколько отдельныхTo do this, you may have to break down a query into more than one single query. с временными промежуточными результатами.Then, create a temporary intermediate result.