KB3138930 – RJEŠENJE: kršenje pristupa prilikom izvršavanja spremljene procedure koja koristi kursor na varijabli tablice u SQL Server

Primjenjuje se na
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)

Simptomi

Pretpostavimo da ste stvorili spremljenu proceduru koja koristi kursor na varijabli tablice u sustavu Microsoft SQL Server 2012 ili SQL Server 2014. Osim toga, pohranjena procedura ažurira tablicu pomoću naredbe WHERE CURRENT OF zajedno s pokazivačem.

Primjerice, pohranjena procedura može izgledati ovako:

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 

Kada spremljenu proceduru izvršite pomoću spremljene procedure sustava sp_refreshsqlmodule, može doći do povrede prava pristupa i pojavljivanja poruka o pogreškama slična sljedećoj:

Napomena

Poruka 596, razina 21, stanje 1Nije moguće nastaviti izvršavanje jer je sesija u stanju zaustavljanja. Poruka 0, razina 20, stanje 0Došlo je do ozbiljne pogreške u trenutnoj naredbi. Rezultate ako takvi mogu biti odbačeni.

U toj se situaciji u zapisnike o pogreškama sustava SQL Server zapisuju i pogreške koje sliče sljedećima:

Napomena

date time.730 spid51 SqlDumpExceptionHandler: Proces 51 generirao je fatalnu iznimku c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server prekida ovaj postupak.
Date Time.730 SPID51 * *******************************************************************************
Date Time.730 SPID51 *
date time.730 spid51 * POČETAK IZVATKA O STANJU TEMELJA:
Date Time.730 SPID51 * Date Time SPID 51
Date Time.730 SPID51 *
Date Time.730 SPID51 *
date time.730 spid51 * Exception Address = 000007FFC270236D5 Module(sqllang+0000000005036D5)
date time.730 spid51 * Kod iznimke = c0000005 EXCEPTION_ACCESS_VIOLATION
date time.730 spid51 * Došlo je do povrede pristupa čitanje adrese 0000006F00620074
date time.730 spid51 * Ulazni međuspremnik 136 bajtova -
date time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'
Date Time.730 SPID51 *
Date Time.730 SPID51 *

      

Rješenje

Kumulativni podaci o ažuriranju

Taj je problem riješen u sljedećim ažuriranjima:

          

Preporuka: instalirajte najnovije kumulativno ažuriranje za SQL Server

Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:

      

Status

Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.

Reference

Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.