Симптоми
Да предположим, че имате заявка, която извършва някои операции с низове например за обединение, за чар или 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 в последния сервизен пакет или в актуална корекция от техническата поддръжка.
MSG 596, ниво 21, щат 1, линия LineNumber Не можете да продължите изпълнението, защото Сеансът е в състояние на убийство.
MSG 0, ниво 20, състояние 0, линия LineNumber
Възникнала е тежка грешка в текущата команда. Резултатите, ако има такива, трябва да бъдат отхвърлени.
Причина
По време на етапа на оптимизиране на заявката SQL Server се опитва да изчисли Кардиналите за междинните резултати от различни етапи на заявката, например обединението. Тъй като разрешаването на конфликти при комплектоване става в края, оптимизаторът на заявки може да не го забелязва и се опитва да изпълни изчислението на кардиналното съединяване на вход с конфликтно комплектоване.
Решение
Този проблем е коригиран в следните сборни актуализации за SQL Server:
Кумулативна актуализация 8 за SQL Server 2016 SP1
Всяка нова сборна актуализация за SQL Server съдържа всички поправки и всички корекции на защитата, които са били включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Най-новата сборна актуализация за SQL Server 2016
Състоянието
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".
Препратки
Научете повече за терминологията, която Microsoft използва, за да опише софтуерни актуализации.