Симптоми
Да допуснем, че имате заявка, която извършва някои операции с низове, например конкатенация, върху колони 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 използва за описване на актуализациите на софтуера.