KB4054398 – POPRAVEK: »Neveljavna primerjava zaradi BREZ ZBIRANJA« se je pojavila v SQL Server 2014, 2016 in 2017

Velja za
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)

Znaki

Denimo, da imate poizvedbo, ki izvaja nekatere operacije niza, na primer spojitev, v stolpcih CHAR ali VARCHAR v strežnikih Microsoft SQL Server 2014, 2016 in 2017. Oglejte si ta scenarij:

  • Stolpce spojite z različnimi zbiranji, ki so jim dodeljena.
  • Ta primerjanja so medsebojno nezdružljiva. Poskušate na primer spojiti stolpec, ki je zbran kot Latin1_General_CI_AI z Latin1_General_BIN.
  • Končni rezultat spojitve je dodeljen določenemu primerjanju (vključno z »database_default«) v okviru reševanja spora pri primerjanju.

V tem primeru lahko SQL Server vrne izjavo o maloprodaji z navedbo »Neveljavna primerjava zaradi NI ZBIRANJA«, morda pa boste prejeli sporočila o napaki, podobna temu:

Opomba

  • Location: typinfo.cpp:LineNumber
    Izraz: false
    SPID: SPID
    ID procesa: ID procesa
    Opis: Primerjava ni veljavna zaradi NI ZBIRANJA.

  • msg 3624, raven 20, stanje 1, številka vrstice
    Preverjanje uveljavljanja sistema ni uspelo. Podrobnosti najdete v dnevniku napak strežnika SQL Server. Napako pri izjavljanju običajno povzroči napaka programske opreme ali poškodbe podatkov. Če želite poiskati poškodbe zbirke podatkov, zaženite DBCC CHECKDB. Če ste se med nastavitvijo strinjali s pošiljanjem izvozov Microsoftu, bo Microsoftu poslan mini izvoz. Microsoft lahko na voljo posodobitev v najnovejšem servisnem paketu ali v obliki sprotnega popravka tehnične podpore.

  • msg 596, Level 21, State 1, line Number
    Izvajanja ni mogoče nadaljevati, ker je seja v stanju »kill state«.

  • msg 0, level 20, state 0, line numberNumber

  • V trenutnem ukazu je prišlo do resne napake.  Morebitne rezultate je treba zavreči.

Vzrok

Med stopnjo optimizacije poizvedbe poskuša SQL Server izračunati kardinalnost vmesnih rezultatov različnih stopenj poizvedbe, kot je združevanje. Ker se spor pri zbiranju razreši na samem koncu, optimizator poizvedbe morda tega ne pozna in poskuša izračunati kardinalnost spajanja na vnosu s spornim zbiranjem.

Rešitev

Ta težava je odpravljena v naslednjih zbirnih posodobitvah za SQL Server:

Zbirna posodobitev 8 za SQL Server 2016 SP1

Zbirna posodobitev 4 za SQL Server 2017

Zbirna posodobitev 9 za SQL Server 2014 SP2

O zbirnih posodobitvah za SQL Server:

Vsaka nova zbirna posodobitev za SQL Server vsebuje vse sprotne in varnostne popravke, ki so bili vključeni v prejšnjo zbirno posodobitev. Oglejte si najnovejše zbirne posodobitve za SQL Server:

Najnovejša zbirna posodobitev za SQL Server 2016

Najnovejša zbirna posodobitev za SQL Server 2017

Najnovejša zbirna posodobitev za SQL Server 2014

Stanje

Microsoft je potrdil, da gre za težavo v Microsoftovih izdelkih, ki so navedeni v razdelku »Velja za«.

Sklici

Preberite več o terminologiji, ki jo Microsoft uporablja za opisovanje posodobitev programske opreme.