KB4054398 – POPRAVKA: "Nevažeće poređenje zbog BEZ UPARIVANJA" maloprodajna tvrdnja se javlja u SQL Server 2014, 2016. i 2017. godine

Primenjuje 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 izvršava neke operacije sa niskama, na primer spajanje, na kolonama CHAR ili VARCHAR u sistemima Microsoft SQL Server 2014, 2016 i 2017. Uzmite u obzir sledeću situaciju:

  • Kolone spajate sa različitim upoređivanjima koja su im dodeljena.
  • Ta upoređivanja su međusobno nekompatibilna. Na primer, pokušavate da spojite kolonu koja je upoređena kao Latin1_General_CI_AI sa Latin1_General_BIN.
  • Krajnji rezultat spajanja se dodeljuje određenom upoređivanju (uključujući "database_default") u cilju rešavanja neusaglašenosti upoređivanja.

U ovom scenariju, SQL Server može da vrati tvrdnju o maloprodaji koja glasi "Nevažeće poređenje zbog BEZ UPARIVANJA", a možete da dobijete i neke poruke o grešci koje izgledaju ovako:

Napomena

  • Lokacija: typinfo.cpp:LineNumber
    Izraz: false
    SPID: SPID
    ID procesa: ID procesa
    Opis: Nevažeće poređenje zbog BEZ UPARIVANJA.

  • Poruka 3624, nivo 20, država 1, broj reda
    Provera sistemske tvrdnje nije uspela. Detalje potražite u evidenciji grešaka za SQL Server. Do greške pri potvrđivanju obično dolazi zbog softverske greške ili oštećenja podataka. Da biste proverili da li baza podataka nije oštećena, uzmite u obzir pokretanje DBCC CHECKDB. Ako ste pristali da šaljete prikaze korporaciji Microsoft tokom instalacije, korporaciji Microsoft se šalje mali prikaz. Microsoft može da obezbedi ispravku u najnovijem servisnom paketu ili u hitnoj ispravci tehničke podrške.

  • Poruka 596, nivo 21, stanje 1, broj reda
    Nije moguće nastaviti izvršavanje jer je sesija u stanju ukidanja.

  • poruka 0, nivo 20, stanje 0, broj reda

  • Došlo je do ozbiljne greške na trenutnoj komandi.  Rezultate, ako postoje, treba odbaciti.

Uzrok

Tokom faze optimizacije upita, SQL Server pokušava da izračuna kardinalnosti na posrednim rezultatima različitih faza upita, na primer spajanja. Pošto se rešavanje neusaglašenosti upoređivanja vrši na samom kraju, optimizator upita možda nije svestan toga i pokušava da izvrši izračunavanje kardinalnosti spajanja na unosu sa neusaglašenim upoređivanjem.

Rešenje

Ovaj problem je rešen u sledećim kumulativnim ispravkama za SQL Server:

Kumulativna ispravka 8 za SQL Server 2016 SP1

Kumulativna ispravka 4 za SQL Server 2017

Kumulativna ispravka 9 za SQL Server 2014 SP2

Osnovni podaci o kumulativnim ispravkama za SQL Server:

Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:

Najnovija kumulativna ispravka za SQL Server 2016

Najnovija kumulativna ispravka za SQL Server 2017

Najnovija kumulativna ispravka za SQL Server 2014

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.

Reference

Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ispravki.