KB4054398 – KORJAUS: "Virheellinen vertailu lajittelun puuttumisen vuoksi" jälleenmyynnin vahvistus ilmenee SQL Server 2014:ssä, 2016:ssa ja 2017:ssä

Käytetään kohteeseen
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)

Ongelman ilmenemistapa

Oletetaan, että sinulla on kysely, joka suorittaa joitain merkkijonotoimintoja, esimerkiksi ketjutusta, CHAR- tai VARCHAR-sarakkeissa Microsoft SQL Server 2014:ssä, 2016:ssa ja 2017:ssä. Mieti seuraavaa tilannetta:

  • Sarakkeet ketjutetaan erilaisilla niihin määritetyillä lajitteluilla.
  • Nämä lajittelut ovat yhteensopimattomia toistensa kanssa. Oletetaan esimerkiksi, että yrität liittää Latin1_General_CI_AI lajitellun sarakkeen Latin1_General_BIN.
  • Ketjutuksen lopullinen tulos määritetään tiettyyn lajitteluun (mukaan lukien "database_default") lajitteluristiriidan ratkaisun yhteydessä.

Tässä skenaariossa SQL Server saattaa palauttaa jälleenmyynnin vahvistuksen, jossa todetaan "Virheellinen vertailu lajittelun puuttumisen vuoksi", ja näyttöön saattaa tulla seuraavanlaisia virhesanomia:

Huomautus

  • Sijainti: typinfo.cpp:LineNumber
    Lauseke: epätosi
    SPID: SPID
    Prosessin tunnus: ProcessID
    Kuvaus: Virheellinen vertailu lajittelun puuttumisen vuoksi.

  • Msg 3624, taso 20, tila 1, rivinumero
    Järjestelmän vahvistustarkistus epäonnistui. Katso lisätietoja SQL Server -virhelokista. Vahvistusvirhe johtuu yleensä ohjelmistovirheestä tai tietojen vioittumisesta. Jos haluat tarkistaa tietokannan vioittumisen, harkitse DBCC CHECKDB -komennon suorittamista. Jos olet asennuksen aikana hyväksynyt vedosten lähettämisen Microsoftille, Microsoftille lähetetään pikavedos. Päivitys saattaa olla saatavilla Microsoftilta uusimmassa Service Packissa tai teknisen tuen Hotfix-korjauksessa.

  • Msg 596, taso 21, tila 1, rivinumero
    Suoritusta ei voi jatkaa, koska istunto on tappotilassa.

  • Sanoma 0, taso 20, tila 0, rivinumero

  • Nykyisessä komennossa tapahtui vakava virhe.  Mahdolliset tulokset on hylättävä.

Syy

Kyselyn optimointivaiheessa SQL Server yrittää laskea kardinaliteetit kyselyn eri vaiheiden, esimerkiksi ketjutuksen, välituloksista. Koska lajitteluristiriitojen ratkaisu tapahtuu aivan lopussa, kyselyn optimoija ei ehkä huomaa sitä ja yrittää laskea ketjutuskardinaliteetin syötteessä, jossa lajittelu on ristiriitainen.

Ratkaisu

Tämä ongelma on korjattu seuraavissa SQL Server kumulatiivisissa päivityksissä:

SQL Server 2016 SP1:n kumulatiivinen päivitys 8

SQL Server 2017:n kumulatiivinen päivitys 4

SQL Server 2014 SP2:n kumulatiivinen päivitys 9

Tietoja SQL Server:n kumulatiivisista päivityksistä:

Jokainen uusi SQL Server -kumulatiivinen päivitys sisältää kaikki edelliseen kumulatiiviseen päivitykseen sisältyvät hotfix-korjaukset ja tietoturvakorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:

SQL Server 2016:n uusin kumulatiivinen päivitys

SQL Server 2017:n uusin kumulatiivinen päivitys

SQL Server 2014:n uusin kumulatiivinen päivitys

Tila

Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.

Viitteet

Lue tietoja Microsoftin ohjelmistopäivitystensä kuvaamiseen käyttämästä sanastosta.