KB4054398 - FIX: "Ongeldige vergelijking als gevolg van GEEN COLLATIE" retailclaim komt voor in SQL Server 2014, 2016 en 2017

Van toepassing op
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)

Symptomen

Stel dat u een query hebt waarmee enkele tekenreeksbewerkingen worden uitgevoerd, bijvoorbeeld samenvoeging, op CHAR- of VARCHAR-kolommen in Microsoft SQL Server 2014, 2016 en 2017. Neem als voorbeeld het volgende scenario:

  • U voegt kolommen samen met verschillende sorteringen die eraan zijn toegewezen.
  • Deze sorteringen zijn onverenigbaar met elkaar. U probeert bijvoorbeeld een kolom samen te voegen die als Latin1_General_CI_AI is gesorteerd met Latin1_General_BIN.
  • Het uiteindelijke resultaat van de samenvoeging wordt toegewezen aan een specifieke sortering (inclusief 'database_default') voor de oplossing van het collatieconflict.

In dit scenario kan SQL Server een retail-claim retourneren met de mededeling 'Ongeldige vergelijking vanwege GEEN SORTERING' en ziet u mogelijk foutberichten van de volgende strekking:

Opmerking

  • Locatie: typinfo.cpp:LineNumber
    Expressie: onwaar
    SPID: SPID
    Proces-id: ProcessID
    Beschrijving: Ongeldige vergelijking vanwege GEEN SORTERING.

  • Msg 3624, Level 20, State 1, Line LineNumber
    Een systeembevestigingscontrole is mislukt. Controleer het foutenlogboek van SQL Server voor meer informatie. Meestal wordt een beweringsfout veroorzaakt door een softwarefout of gegevensbeschadiging. Als u wilt controleren op beschadigde databases, kunt u DBCC CHECKDB uitvoeren. Als u tijdens de installatie hebt afgesproken om dumps naar Microsoft te verzenden, wordt er een minidump naar Microsoft verzonden. Er is mogelijk een update beschikbaar van Microsoft in het nieuwste servicepack of in een hotfix van technische ondersteuning.

  • Msg 596, Level 21, State 1, Line LineNumber
    Kan de uitvoering niet voortzetten omdat de sessie zich in de kill-status bevindt.

  • Msg 0, Level 20, State 0, Line LineNumber

  • Er is een ernstige fout opgetreden in de huidige opdracht.  De resultaten, indien aanwezig, moeten worden genegeerd.

Oorzaak

Tijdens de queryoptimalisatiefase probeert SQL Server kardinaliteiten te berekenen voor tussenliggende resultaten van verschillende stadia van de query, bijvoorbeeld de samenvoeging. Aangezien het oplossen van het collatieconflict helemaal aan het einde plaatsvindt, is het mogelijk dat het query-optimalisatieprogramma zich hier niet van bewust is en de berekening van de samenvoegkardinaliteit probeert uit te voeren op een invoer met een geconflicteerde sortering.

Oplossing

Dit probleem is opgelost in de volgende cumulatieve updates voor SQL Server:

Cumulatieve update 8 voor SQL Server 2016 SP1

Cumulatieve update 4 voor SQL Server 2017

Cumulatieve update 9 voor SQL Server 2014 SP2

Over cumulatieve updates voor SQL Server:

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die deel uitmaakten van de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

Meest recente cumulatieve update voor SQL Server 2016

Meest recente cumulatieve update voor SQL Server 2017

Meest recente cumulatieve update voor SQL Server 2014

Status

Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.