KB4054398 – OPRAVA: V SQL Server 2014, 2016 a 2017 dochází k neplatnému porovnání kvůli NO COLLATION.

Platí pro
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)

Příznaky

Předpokládejme, že máte dotaz, který provádí některé operace s řetězci, například zřetězení sloupců CHAR nebo VARCHAR v Microsoft SQL Server 2014, 2016 a 2017. Vezměte v úvahu následující scénář:

  • Můžete zřetězit sloupce s různými přiřazeními, které jsou k nim přiřazené.
  • Tato řazení jsou vzájemně nekompatibilní. Pokusíte se třeba zřetězit sloupec, který se bude kompletovat jako Latin1_General_CI_AI s Latin1_General_BIN.
  • Konečný výsledek zřetězení je v rámci řešení konfliktů řazení přiřazen ke konkrétnímu řazení (včetně "database_default").

V tomto scénáři může SQL Server vrátit kontrolní výraz pro maloobchodní prodej, který uvádí "Neplatné porovnání kvůli NO COLLATION", a mohou se zobrazit některé chybové zprávy podobné následující:

Poznámka

  • Umístění: typinfo.cpp:ČísloŘádku
    Výraz: nepravda
    SPID: SPID
    ID procesu: ProcessID
    Popis: Neplatné porovnání kvůli NO COLLATION.

  • Zpráva 3624, úroveň 20, stav 1, číslo řádku
    Kontrola kontrolního výrazu systému se nezdařila. Podrobnosti najdete v protokolu chyb systému SQL Server. Chyba kontrolního výrazu je obvykle způsobena chybou softwaru nebo poškozením dat. Chcete-li zkontrolovat poškození databáze, zvažte spuštění příkazu DBCC CHECKDB. Pokud jste během instalace souhlasili s odesíláním výpisů do Microsoftu, bude společnosti Microsoft odeslán minivýpis. Aktualizace může být k dispozici od Microsoftu v nejnovější aktualizaci Service Pack nebo v opravě hotfix od technické podpory.

  • Zpráva 596, úroveň 21, stav 1, číslo řádku
    V provádění nemůže pokračovat, protože relace je ve stavu ukončení.

  • Zpráva 0, úroveň 20, stav 0, číslo řádku

  • U aktuálního příkazu došlo k závažné chybě.  Případné výsledky by měly být zahozeny.

Příčina

Během fáze optimalizace dotazu se SQL Server pokouší vypočítat mohutnosti na přechodných výsledcích různých fází dotazu, například zřetězení. Vzhledem k tomu, že řešení konfliktů kolace probíhá na samém konci, optimalizátor dotazů o tom nemusí vědět a pokusí se provést výpočet mohutnosti zřetězení na vstupu s konfliktním kolací.

Řešení

Tento problém je opravený v následujících kumulativních aktualizacích pro SQL Server:

Kumulativní aktualizace 8 pro SQL Server 2016 SP1

Kumulativní aktualizace 4 pro SQL Server 2017

Kumulativní aktualizace 9 pro SQL Server 2014 SP2

Informace o kumulativních aktualizacích pro SQL Server:

Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace pro SQL Server:

Nejnovější kumulativní aktualizace pro SQL Server 2016

Nejnovější kumulativní aktualizace pro SQL Server 2017

Nejnovější kumulativní aktualizace pro SQL Server 2014

Stav

Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.

Reference

Podívejte se na informace o terminologii, kterou společnost Microsoft používá k popisování aktualizací softwaru.