KB4054398 – KORREKTUR: "Ungültiger Vergleich aufgrund von NO COLLATION" retail assert tritt in SQL Server 2014, 2016 und 2017 auf

Gilt für
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)

Symptome

Angenommen, Sie verfügen über eine Abfrage, die einige Zeichenfolgenvorgänge ausführt, z. B. Verkettung, für CHAR- oder VARCHAR-Spalten in Microsoft SQL Server 2014, 2016 und 2017. Nehmen Sie folgendes Szenario an:

  • Sie verketten Spalten mit verschiedenen Sortierungen, die ihnen zugewiesen sind.
  • Diese Sortierungen sind miteinander nicht kompatibel. Sie versuchen beispielsweise, eine Spalte, die als Latin1_General_CI_AI sortiert ist, mit Latin1_General_BIN zu verketten.
  • Das Endergebnis der Verkettung wird einer bestimmten Sortierung (einschließlich "database_default") als Lösung des Sortierungskonflikts zugewiesen.

In diesem Szenario gibt SQL Server möglicherweise eine Verkaufsbestätigung zurück, die "Ungültiger Vergleich aufgrund von NO COLLATION" angibt, und Sie erhalten möglicherweise einige Fehlermeldungen, die der folgenden ähneln:

Hinweis

  • Location: typinfo.cpp:LineNumber
    Ausdruck: false
    SPID: SPID
    Prozess-ID: ProcessID
    Beschreibung: Ungültiger Vergleich aufgrund von NO COLLATION.

  • Msg 3624, Level 20, State 1, Line LineNumber
    Eine Überprüfung der Systemassertion ist fehlgeschlagen. Weitere Informationen finden Sie im SQL Server Fehlerprotokoll. In der Regel wird ein Assertionsfehler durch einen Softwarefehler oder eine Datenbeschädigung verursacht. Erwägen Sie die Ausführung von DBCC CHECKDB, um nach einer Beschädigung der Datenbank zu suchen. Wenn Sie während des Setups zugestimmt haben, Dumps an Microsoft zu senden, wird ein Minidump an Microsoft gesendet. Möglicherweise ist ein Update von Microsoft im neuesten Service Pack oder in einem Hotfix vom technischen Support verfügbar.

  • Msg 596, Level 21, State 1, LineNumber
    Die Ausführung kann nicht fortgesetzt werden, da sich die Sitzung im Kill-Zustand befindet.

  • Msg 0, Level 20, State 0, LineNumber

  • Beim aktuellen Befehl ist ein schwerwiegender Fehler aufgetreten.  Die Ergebnisse sollten ggf. verworfen werden.

Ursache

Während der Abfrageoptimierungsphase versucht SQL Server, Kardinalitäten für Zwischenergebnisse verschiedener Phasen der Abfrage zu berechnen, z. B. die Verkettung. Da die Auflösung des Sortierungskonflikts ganz am Ende stattfindet, ist sich der Abfrageoptimierer möglicherweise nicht dessen bewusst und versucht, die Berechnung der Verkettungskardinalität für eine Eingabe mit konfliktierender Sortierung durchzuführen.

Lösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:

Kumulatives Update 8 für SQL Server 2016 SP1

Kumulatives Update 4 für SQL Server 2017

Kumulatives Update 9 für SQL Server 2014 SP2

Informationen zu kumulativen Updates für SQL Server:

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

Neuestes kumulatives Update für SQL Server 2016

Neuestes kumulative Update für SQL Server 2017

Neuestes kumulatives Update für SQL Server 2014

Status

Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.

Referenzmaterial

Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.