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:
- Kumulativno ažuriranje 13 za SQL Server 2014
- Kumulativno ažuriranje 6 za SQL Server 2014 Service Pack 1 (SP1)
- Kumulativno ažuriranje 2 za SQL Server 2012 Service Pack 3 (SP3)
- Kumulativno ažuriranje 11 za SQL Server 2012 Service Pack 2 (SP2)
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:
- Najnovije kumulativno ažuriranje za SQL Server 2014
- Najnovije kumulativno ažuriranje za SQL Server 2014 SP1
- Najnovije kumulativno ažuriranje za SQL Server 2012 SP2
- Najnovije kumulativno ažuriranje za SQL Server 2012 SP3
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.