Problembeschreibung
Angenommen, Sie erstellen eine gespeicherte Prozedur, die einen Cursor für eine Tabellenvariable in Microsoft SQL Server 2012 oder SQL Server 2014 verwendet. Darüber hinaus aktualisiert die gespeicherte Prozedur die Tabelle, indem Sie eine WHERE-CURRENT- Anweisung zusammen mit dem Cursor verwendet. Beispielsweise kann die gespeicherte Prozedur wie folgt aussehen:
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
Wenn Sie die gespeicherte Prozedur mithilfe der gespeicherten Systemprozedur sp_refreshsqlmodule ausführen, kann eine Zugriffsverletzung auftreten, und Sie erhalten möglicherweise Fehlermeldungen, die wie folgt aussehen:
Msg 596, Stufe 21, Zustand 1Cannot fortsetzen der Ausführung, da sich die Sitzung im Zustand "Kill" befindet. Msg 0, Stufe 20, Zustand 0A schwerer Fehler beim aktuellen Befehl. Die Ergebnisse, falls vorhanden, sollten verworfen werden.
In diesem Fall werden Fehler, die den folgenden ähneln, auch in die SQL Server-Fehlerprotokolle geschrieben:
Datum Uhrzeit. 730 spid51 SqlDumpExceptionHandler: Prozess 51 hat eine schwerwiegende Ausnahme c0000005 EXCEPTION_ACCESS_VIOLATION generiert. 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 Uhrzeit. 730 spid51 * Datum Uhrzeit. 730 spid51 *
Lösung
Informationen zum kumulativen Update
Dieses Problem wurde in den folgenden Updates behoben:
-
Kumulatives Update 13 für SQL Server 2014
-
Kumulatives Update 6 für SQL Server 2014 Service Pack 1 (SP1)
-
Kumulatives Update 2 für SQL Server 2012 Service Pack 3 (SP3)
-
Kumulatives Update 11 für SQL Server 2012 Service Pack 2 (SP2)
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.
Informationsquellen
Erfahren Sie mehr über die Terminologie , mit der Microsoft Softwareupdates beschreibt.