Sümptomid
Oletagem, et loote salvestatud protseduuri, mis kasutab kursorit tabelimuutuja Microsoft SQL Server 2012 või SQL Server 2014. Lisaks värskendab salvestatud protseduur tabelit, kasutades koos kursoriga lauset WHERE CURRENT OF.
Näiteks võib salvestatud protseduur sarnaneda järgmisega:
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
Kui käivitate salvestatud protseduuri sp_refreshsqlmodule süsteemi salvestatud protseduuri abil, võib ilmneda pääsurikkumine ja võidakse kuvada tõrketeated, mis sarnanevad järgmisega:
Märkus.
Msg 596, tase 21, olek 1Cannot jätkake käivitamist, kuna seanss on tapmisolekus. Msg 0, 20. tase, oleku 0A tõsine tõrge praeguses käsus. Võimalikud tulemid tuleks hüljata.
Sellises olukorras kirjutatakse tõrked, mis sarnanevad järgmisega, ka SQL Server tõrkelogidesse:
Märkus.
date time.730 spid51 SqlDumpExceptionHandler: Process 51 loodud pöördumatu erand c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server lõpetab selle protsessi.
kuupäev kellaaeg.730 spid51 * *******************************************************************************
kuupäev kellaaeg.730 spid51 *
date time.730 spid51 * BEGIN STACK DUMP:
date time.730 spid51 * date time spid 51
kuupäev kellaaeg.730 spid51 *
kuupäev kellaaeg.730 spid51 *
date time.730 spid51 * Exception Address = 00007FFC270236D5 Module(sqllang+000000000005036D5)
date time.730 spid51 * Exception Code = c0000005 EXCEPTION_ACCESS_VIOLATION
date time.730 spid51 * Access Violation occurred reading address 0000006F00620074
date time.730 spid51 * Input Buffer 136 baiti -
date time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'
kuupäev kellaaeg.730 spid51 *
kuupäev kellaaeg.730 spid51 *
Lahendus
Koondvärskenduse teave
See probleem on lahendatud järgmistes värskendustes.
- SQL Server 2014 koondvärskendus 13
- SQL Server 2014 hoolduspaketi Service Pack 1 (SP1) koondvärskendus 6
- SQL Server 2012 hoolduspaketi Service Pack 3 (SP3) koondvärskendus 2
- SQL Server 2012 hoolduspaketi Service Pack 2 (SP2) koondvärskendus 11
Soovitus: installige SQL Server uusim koondvärskendus
Iga uus koondvärskendus SQL Server sisaldab kõiki kiirparandusi ja kõiki turbeparandusi, mis olid kaasatud eelmise koondvärskenduse. Vaadake uusimaid SQL Server koondvärskendusi.
- Uusim koondvärskendus SQL Server 2014 jaoks
- Uusim koondvärskendus SQL Server 2014 SP1 jaoks
- Uusim koondvärskendus SQL Server 2012 SP2 jaoks
- Uusim koondvärskendus SQL Server 2012 SP3 jaoks
Olek
Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.
Viited
Lisateave Microsofti tarkvaravärskenduste terminoloogia kohta.