KB4058565 – POPRAVEK: Napaka pri izvajanju shranjene procedure, ki se sklicuje na velik predmet, v SQL Server 2014, 2016 in 2017

Velja za
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard 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

Napaka v izjavi se lahko pojavi, ko Microsoft SQL Server večkrat izvede shranjeno proceduro, ki izvede naslednje:

  • Vzame za argument velik predmet, kot je varchar(max) ali varbinary(max);
  • Ustvari začasno tabelo z obsegom za izvajanje procedure.
  • Uporablja argument velikega predmeta v začasni tabeli.

Morda boste v dnevniku napak v storitvi SQL Server našli podobno napaki trditve:

SPID za datum/čas Napaka: 17065, resnost: 16, stanje: 1.

Datum/čas Potrditev SPID SQL Server: Datoteka: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Poskus dostopa do potekle ročice zbirke dvojiških podatkov (1). Ta napaka je morda povezana s časom. Če napake ne odpravite tudi po vnovičnem zagonu izjave, uporabite DBCC CHECKDB, da preverite strukturno integriteto zbirke podatkov, ali pa znova zaženite strežnik, da zagotovite, da podatkovne strukture v pomnilniku niso poškodovane.

SPID za datum/čas Napaka: 3624, resnost: 20, stanje: 1.

SPID za datum/čas 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.

Vzrok

SQL Server ima notranjo logiko za onemogočanje predpomnjenja poizvedb, ki se sklicujejo na velike predmete, tako da se poznejše izvedbe ne sklicujejo na tiste LOB (ki so bili ustvarjeni med prejšnjimi zagoni in so zato neveljavni za naslednje zagone). Ta logika ni obravnavala primera odložene razrešitve imena (DNR) v začasnih tabelah, ki je povzročila, da so bili ti načrti predpomnjeni. Začasne tabele z obsegom so drage za ustvarjanje in SQL Server jih shrani v predpomnilnik za vnovično uporabo v poznejših izvedbah. To prepreči ponovno prevajanje takšnih poizvedb zaradi sprememb sheme.

Več informacij o ločljivosti odloženega imena.

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 10 za SQL Server 2014 s servisnim paketom SP2

Več 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 graditev. Oglejte si najnovejšo zbirno posodobitev za SQL Server:

Najnovejša zbirna posodobitev za SQL Server 2016

Najnovejša zbirna posodobitev za SQL Server 2017

Najnovejše zbirne posodobitve 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.