KB4058565 – LØS: Deklarasjonsfeil når du kjører en lagret prosedyre som refererer til et stort objekt i SQL Server 2014, 2016 og 2017

Gjelder for
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)

Symptomer

En deklarasjonsfeil kan oppstå når Microsoft SQL Server gjentatte ganger kjører en lagret prosedyre som utfører følgende:

  • Tar et stort objekt, for eksempel varchar(max) eller varbinary(max), som argument, og
  • Oppretter en midlertidig tabell som er begrenset til utførelsen av prosedyren, og
  • Bruker argumentet stort objekt i den midlertidige tabellen.

Du kan finne deklarasjonsfeilen som ligner på følgende i SQL Server-feilloggen:

SPID for dato/klokkeslett Feil: 17065, Alvorsgrad: 16, Delstat: 1.

Dato/klokkeslett SPID SQL Server-deklarasjon: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Forsøk på å få tilgang til utløpt blob-referanse (1). Denne feilen kan være tidsrelatert. Hvis feilen vedvarer etter at du har kjørt setningen på nytt, kan du bruke DBCC CHECKDB til å kontrollere databasen for strukturell integritet, eller starte serveren på nytt for å sikre at datastrukturer i minnet ikke er skadet.

SPID for dato/klokkeslett Feil: 3624, Alvorsgrad: 20, Delstat: 1.

SPID for dato/klokkeslett En systemdeklarasjonskontroll mislyktes. Sjekk SQL Server-feilloggen for mer informasjon. Vanligvis er en deklarasjonsfeil forårsaket av en programvarefeil eller dataskade. Hvis du skal kontrollere om databasen er skadet, kan du vurdere å kjøre DBCC CHECKDB. Hvis du godtar å sende dumper til Microsoft under installasjonen, blir en minidump sendt til Microsoft. En oppdatering kan være tilgjengelig fra Microsoft i den nyeste oppdateringspakken eller i en hurtigreparasjon fra teknisk støtte.

Årsak

SQL Server har intern logikk for å deaktivere hurtigbufring av spørringer som refererer til store objekter, slik at påfølgende kjøringer ikke refererer til disse LOB-ene (som ble opprettet under tidligere kjøringer og derfor er ugyldige for påfølgende kjøringer). Denne logikken håndterte ikke tilfellet med Utsatt navneløsing (DNR) på midlertidige tabeller som førte til at disse planene ble bufret. Midlertidige tabeller med omfang er dyre å opprette, og SQL Server bufrer dem for gjenbruk i påfølgende kjøringer. Dette forhindrer ny kompilering av slike spørringer på grunn av skjemaendringer.

Mer informasjon om Utsatt navneløsing.

Oppløsning

Dette problemet er løst i følgende kumulative oppdateringer for SQL Server:

Kumulativ oppdatering 8 for SQL Server 2016 SP1

Kumulativ oppdatering 4 for SQL Server 2017

Kumulativ oppdatering 10 for SQL Server 2014 Service Pack 2

Om kumulative oppdateringer for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og sikkerhetsoppdateringer som fantes i forrige build. Se den nyeste kumulative oppdateringen for SQL Server:

Den nyeste kumulative oppdateringen for SQL Server 2016

Den nyeste kumulative oppdateringen for SQL Server 2017

De nyeste kumulative oppdateringene for SQL Server 2014

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».

Kilder

Finn ut mer om terminologien Microsoft bruker til å beskrive programvareoppdateringer.