KB4054398 – RJEŠENJE: maloprodajna tvrdnja "Usporedba nije valjana zbog NO COLLATION" pojavljuje se u SQL Server 2014., 2016. i 2017.

Primjenjuje se na
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)

Simptomi

Pretpostavimo da imate upit koji izvodi neke operacije niza, na primjer, spajanje, na stupcima CHAR ili VARCHAR u sustavu Microsoft SQL Server 2014, 2016 i 2017. Razmotrite sljedeći scenarij:

  • Povezujete stupce s različitim uvezima koji su im dodijeljeni.
  • Te su veze međusobno nespojive. Pokušate, primjerice, spojiti stupac koji je složen kao Latin1_General_CI_AI s Latin1_General_BIN.
  • Konačni rezultat spajanja dodjeljuje se određenoj grupaciji (uključujući "database_default") kao pitanje rješavanja sukoba uvezivanja

U tom scenariju SQL Server može vratiti tvrdnju o maloprodaji koja navodi "Usporedba nije valjana zbog NEMA RAZVRSTAVANJA", a možda ćete primiti poruke o pogreškama slične sljedećoj:

Napomena

  • Location: typinfo.cpp:LineNumber
    Izraz: false
    SPID: SPID
    ID procesa: ID postupka
    Opis: Usporedba nije valjana zbog NO COLLATION.

  • Msg 3624, Level 20, State 1, Line LineNumber
    Provjera tvrdnji sustava nije uspjela. Pojedinosti potražite u zapisniku o pogreškama sustava SQL Server. Pogrešku tvrdnje obično uzrokuje softverska programska pogreška ili oštećenje podataka. Da biste provjerili je li baza podataka oštećena, pokrenite naredbu DBCC CHECKDB. Ako ste pristali na slanje sigurnosnih kopija Microsoftu tijekom postavljanja, mali će se izvatci o stanju pri padu sustava poslati Microsoftu. Microsoft može ponuditi ažuriranje u najnovijem servisnom paketu ili u hitnom popravku tehničke podrške.

  • poruka 596, razina 21, država 1, broj retka
    Nije moguće nastaviti s izvršavanjem jer je sesija u stanju zaustavljanja.

  • poruka 0, razina 20, država 0, broj retka

  • U trenutnoj naredbi došlo je do ozbiljne pogreške.  Rezultate ako takvi mogu biti odbačeni.

Uzrok

Tijekom faze optimizacije upita SQL Server pokušava izračunati kardinalnosti na prijelaznim rezultatima različitih faza upita, primjerice, na ulančavanju. Budući da se razrješenje sukoba prilikom razvrstavanja odvija na samom kraju, optimizator upita toga možda nije svjestan toga i pokušava izračunati kardinalnost povezivanja na ulazu sa sukobljenim razvrstavanjem.

Rješenje

Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:

Kumulativno ažuriranje 8 za SQL Server 2016 SP1

Kumulativno ažuriranje 4 za SQL Server 2017

Kumulativno ažuriranje 9 za SQL Server 2014 SP2

O kumulativnim ažuriranjima za SQL Server:

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

Najnovije kumulativno ažuriranje za SQL Server 2016

Najnovije kumulativno ažuriranje za SQL Server 2017

Najnovije kumulativno ažuriranje za SQL Server 2014

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.