KB3138930 – LØSNING: Brudd på tilgangstillatelse når du kjører en lagret prosedyre som bruker en markør på en tabellvariabel i SQL Server

Gjelder for
SQL Server 2012 Service Pack 3 SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Symptomer

La oss si at du oppretter en lagret prosedyre som bruker en markør på en tabellvariabel i Microsoft SQL Server 2012 eller SQL Server 2014. I tillegg oppdaterer den lagrede prosedyren tabellen ved å bruke en WHERE-CURRENT OF-setning sammen med markøren.

Den lagrede prosedyren kan for eksempel se omtrent slik ut:

CREATE PROCEDURE dbo.usp_TestSP AS 

BEGIN 

DECLARE @TableVar TABLE (SomeInt INT NULL) 
INSERT @TableVar VALUES (NULL) 

DECLARE @curInt INT, @newInt INT 
SET @newInt = 1 

DECLARE ccc CURSOR LOCAL FOR 
SELECT SomeInt FROM @TableVar WHERE SomeInt IS NULL 

OPEN ccc 

FETCH NEXT FROM ccc INTO @curInt 
UPDATE @TableVar SET SomeInt = @newInt 
WHERE CURRENT OF ccc
CLOSE ccc 

SELECT * FROM @TableVar 
END 

Når du utfører den lagrede prosedyren ved hjelp av sp_refreshsqlmodule systemets lagrede prosedyre, kan det oppstå et tilgangsbrudd, og du kan få feilmeldinger som ligner på følgende:

Obs!

Msg 596, nivå 21, tilstand 1Kan ikke fortsette kjøringen fordi økten er i drepende tilstand. Msg 0, nivå 20, tilstand 0En alvorlig feil oppstod på gjeldende kommando. Eventuelle resultater bør forkastes.

I denne situasjonen blir feil som ligner på følgende også skrevet til SQL Server-feilloggene:

Obs!

dato time.730 spid51 SqlDumpExceptionHandler: Prosess 51 genererte kritisk unntak c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server avslutter denne prosessen.
dato time.730 SPID51 * *******************************************************************************
Dato Time.730 SPID51 *
dato time.730 SPID51 * START STABELDUMP:
dato time.730 SPID51 * dato og klokkeslett SPID 51
Dato Time.730 SPID51 *
Dato Time.730 SPID51 *
dato time.730 spid51 * Unntaksadresse = 00007FFC270236D5 Module(sqllang+0000000005036D5)
dato time.730 spid51 * unntakskode = c0000005 EXCEPTION_ACCESS_VIOLATION
dato time.730 spid51 * Tilgangsbrudd oppstod ved å lese adresse 0000006F00620074
dato time.730 spid51 * Inndatabuffer 136 byte –
dato time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'
Dato Time.730 SPID51 *
Dato Time.730 SPID51 *

      

Oppløsning

Informasjon om kumulativ oppdatering

Dette problemet er løst i følgende oppdateringer:

          

Anbefaling: Installer den nyeste kumulative oppdateringen for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:

      

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 som Microsoft bruker til å beskrive programvareoppdateringer.