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, Line LineNumber
    Проверката на системното утвърждение е неуспешна. Проверете регистрационния файл за грешки на SQL Server за подробности. Обикновено неуспешното твърдение се дължи на софтуерен проблем или повреда на данните. За да проверите за повреда на базата данни, помислете дали да не изпълните DBCC CHECKDB. Ако сте се съгласили да изпращате вторични копия на Microsoft по време на инсталирането, на Microsoft ще се изпрати мини вторично копие. Актуализация може да е налична от Microsoft в най-новия сервизен пакет или в гореща поправка от техническата поддръжка.

  • Съобщение 596, Ниво 21, Състояние 1, Line LineNumber
    Не може да продължи изпълнението, защото сесията е в състояние на прекратяване.

  • Съобщение 0, Ниво 20, Състояние 0, Line LineNumber

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

Причина

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

Решение

Този проблем е решен в следните кумулативни актуализации за SQL Server:

Сборна актуализация 8 за SQL Server 2016 SP1

Сборна актуализация 4 за SQL Server 2017

Сборна актуализация 9 за SQL Server 2014 SP2

За кумулативните актуализации за SQL Server:

Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:

Последна сборна актуализация за SQL Server 2016

Последна сборна актуализация за SQL Server 2017

Последна сборна актуализация за SQL Server 2014

Състояние

Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.

Справки

Научете повече относно терминологията, която Microsoft използва за описване на актуализациите на софтуера.