KB4054398 . ИСПРАВЛЕНИЕ: утверждение о недопустимом сравнении из-за отсутствия сортировки происходит в SQL Server 2014, 2016 и 2017

Применяется к
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Standard on Windows SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Проблема

Предположим, что у вас есть запрос, выполняющий некоторые строковые операции, например объединение столбцов CHAR или VARCHAR в Microsoft SQL Server 2014, 2016 и 2017. Рассмотрим следующий сценарий.

  • Вы объединяете столбцы с разными параметрами сортировки, назначенными им.
  • Эти параметры сортировки несовместимы друг с другом. Например, вы пытаетесь сцепить столбец, который сопоставляется как Latin1_General_CI_AI с Latin1_General_BIN.
  • Окончательный результат объединения назначается определенной сортировке (включая "database_default") в рамках разрешения конфликта параметров сортировки.

В этом сценарии SQL Server может возвращать утверждение розничной торговли с состоянием "Недопустимое сравнение из-за ОТСУТСТВИЯ СОРТИРОВКИ", и вы можете получить некоторые сообщения об ошибках, которые выглядят следующим образом:

Примечание

  • Расположение: typinfo.cpp:LineNumber
    Выражение: false
    SPID: SPID
    Идентификатор процесса: ProcessID
    Описание: недопустимое сравнение из-за ОТСУТСТВИЯ ПАРАМЕТРОВ СОРТИРОВКИ.

  • Msg 3624, Level 20, State 1, LineNumber
    Сбой проверка утверждения системы. Дополнительные сведения см. в журнале ошибок SQL Server. Как правило, сбой утверждения вызван ошибкой программного обеспечения или повреждением данных. Чтобы проверка для повреждения базы данных, рассмотрите возможность запуска DBCC CHECKDB. Если вы согласились отправить дампы в корпорацию Майкрософт во время настройки, в корпорацию Майкрософт будет отправлен мини-дамф. Обновление может быть доступно корпорацией Майкрософт в последнем пакете обновления или в исправлении технической поддержки.

  • Msg 596, Level 21, State 1, LineNumber
    Не удается продолжить выполнение, так как сеанс находится в состоянии завершения.

  • Msg 0, Level 20, State 0, LineNumber

  • В текущей команде произошла серьезная ошибка.  Результаты, если таковые есть, следует отменить.

Причина

На этапе оптимизации запроса SQL Server пытается вычислить кратности на промежуточных результатах различных этапов запроса, например объединения. Так как разрешение конфликта параметров сортировки происходит в самом конце, оптимизатор запросов может не знать об этом и пытается выполнить вычисление кратности объединения на входных данных с конфликтом сортировки.

Решение

Эта проблема устранена в следующих накопительных обновлениях для SQL Server:

Накопительный пакет обновления 8 для SQL Server 2016 с пакетом обновления 1 (SP1)

Накопительный пакет обновления 4 для SQL Server 2017 г.

Накопительный пакет обновления 9 для SQL Server 2014 с пакетом обновления 2 (SP2)

Сведения о накопительных обновлениях для SQL Server:

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

Последнее накопительное обновление для SQL Server 2016 г.

Последнее накопительное обновление для SQL Server 2017 г.

Последнее накопительное обновление для SQL Server 2014 г.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Ссылки

Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.