Příznaky
Předpokládejme, že jste vytvořili uloženou proceduru, která používá kurzor na proměnné tabulky v Microsoft SQL serveru 2012 nebo SQL serveru 2014. Kromě toho uložená procedura aktualizuje tabulku pomocí kurzoru, kde je aktuální příkaz a kurzor. Uložená procedura by mohla vypadat například takto:
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 cccCLOSE ccc SELECT * FROM @TableVar END
Když spustíte uloženou proceduru pomocí uložené procedury sp_refreshsqlmodule systému, může dojít k narušení přístupu a zobrazí se vám chybové zprávy podobné následujícím:
Msg 596, úroveň 21, stav 1Cannot pokračování v provádění, protože relace je ve stavu kill. Msg 0, úroveň 20, v aktuálním příkazu došlo k závažné chybě státu 0A. Případné výsledky se zahodí.
V této situaci se do protokolů chyb SQL serveru zapíší taky chyby, které se podobají následujícím:
Datum a čas 730 spid51 SqlDumpExceptionHandler: proces 51 vygeneroval závažnou výjimku c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.date time.730 spid51 * *******************************************************************************date time.730 spid51 *date time.730 spid51 * BEGIN STACK DUMP:date time.730 spid51 * date time spid 51date time.730 spid51 *date time.730 spid51 *date time.730 spid51 * Exception Address = 00007FFC270236D5 Module(sqllang+00000000005036D5)date time.730 spid51 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATIONdate time.730 spid51 * Access Violation occurred reading address 0000006F00620074date time.730 spid51 * Input Buffer 136 bytes -date time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP] ' datum čas. 730 spid51 * datum a čas 730 spid51 *
Řešení
Informace o kumulativní aktualizaci
Tento problém je opravený v následujících aktualizacích:
-
Kumulativní aktualizace 13 pro SQL Server 2014
-
Kumulativní aktualizace 6 pro SQL Server 2014 Service Pack 1 (SP1)
-
Kumulativní aktualizace 2 pro SQL Server 2012 Service Pack 3 (SP3)
-
Kumulativní aktualizace 11 pro SQL Server 2012 Service Pack 2 (SP2)
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Odkazy
Informace o terminologii používané společností Microsoft k popisu aktualizací softwaru.