KB3138930 - FIX: Accessi rikkumine, kui käivitate salvestatud protseduuri, mis kasutab kursorit tabelimuutuja SQL Server

Rakenduskoht
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)

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.

          

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.

      

Olek

Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.

Viited

Lisateave Microsofti tarkvaravärskenduste terminoloogia kohta.