KB3138930: een schending van de toegang wanneer u een opgeslagen procedure uitvoert die een cursor gebruikt voor een tabelvariabele in SQL Server

Symptomen

Stel dat u een opgeslagen procedure maakt waarbij een cursor in een tabelvariabele wordt gebruikt in Microsoft SQL Server 2012 of SQL Server 2014. Daarnaast wordt met de opgeslagen procedure de tabel bijgewerkt met behulp van een where-huidige instructie samen met de cursor. De opgeslagen procedure kan er bijvoorbeeld als volgt uitzien:

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 

Wanneer u de opgeslagen procedure uitvoert met behulp van de opgeslagen procedure in sp_refreshsqlmodule het systeem, wordt een foutmelding weergegeven en wordt u mogelijk een foutbericht weergegeven dat op de volgende lijken:

Bericht 596, niveau 21, provincie 1Cannot gaat verder met het uitvoeren van de sessie, omdat de sessie de status Kill heeft. Bericht 0, niveau 20, provincie 0A ernstige fout opgetreden bij de huidige opdracht. Het resultaat, indien van toepassing, moet worden verwijderd.

In deze situatie worden foutberichten van de volgende strekking ook naar de foutenlogboeken van SQL Server geschreven:

datum tijd. 730 spid51 SqlDumpExceptionHandler: process 51 gegenereerde fataal uitzondering 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 tijd. 730 spid51 * datum tijd. 730 spid51 *

Oplossing

Cumulatieve updategegevens

Dit probleem is opgelost in de volgende updates:

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige cumulatieve update. Bekijk de nieuwste cumulatieve updates voor SQL Server:

Status

Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Verwijzingen

Lees meer over de terminologie die door Microsoft wordt gebruikt om software-updates te beschrijven.

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×