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.