PARANDUS: Juurdepääsurikkumise kui täidate salvestatud protseduuri, mis kasutab kursorit tabeli muutuja SQL serveris

NB! Artikkel on tõlgitud Microsofti masintõlketarkvaraga ja seda saab parandada Kogukonnapõhise tõlkeraamistiku (CTF) tehnoloogiaga. Microsoft pakub masintõlgitud, kogukonna järeltöödeldud ja inimtõlgitud artikleid, et anda mitmekeelne juurdepääs kõigile meie teabebaasi artiklitele. Masintõlgitud ja järeltöödeldud artiklites võib olla sõnavara-, süntaksi- ja/või grammatikavigu. Microsoft ei vastuta mingite ebatäpsuste, tõrgete ega kahjude eest, mis on tulenenud sisu valest tõlkest või selle kasutamisest meie klientide poolt. Lisateavet CTF-i kohta leiate aadressilt http://support.microsoft.com/gp/machine-translation-corrections/et.

Artikli ingliskeelse versiooni kuvamiseks klõpsake siin: 3138930
Sümptomid
Oletagem, et luua salvestatud protseduuri, mis kasutab kursorit tabeli muutuja Microsoft SQL Server 2012 või SQL Server 2014. Lisaks salvestatud protseduur värskendab tabeliKui praegune, lause koos kursori abil.

Näiteks võib teie salvestatud protseduur näeb välja järgmine:
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 

Kui täidate oma salvestatud protseduuri abil sp_refreshsqlmodule süsteemi salvestatud protseduuri, võib ilmneda juurdepääsurikkumise, ja võite saada tõrketeateid, mis näeb välja järgmine:
MSG 596 tase 21 riigi 1Cannot jätkata täitmine, kuna seanss on kill olekus. MSG 0 tase 20 riigi 0A tõsiseid tõrge praeguse käsk. Tulemused, kui see on olemas, tuleb hävitada.

Sellisel juhul ka kirjutada vigu, mis meenutavad järgmisi SQL Server error logisid:
kuupäev time.730 spid51 SqlDumpExceptionHandler: 51 protsessi loodud fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server lõpetab selle protsessi.
date time.730 spid51 * *******************************************************************************
kuupäev time.730 spid51 *
kuupäev time.730 spid51 * alustada PINU DUMP:
kuupäev time.730 spid51 * kuupäev kellaaeg spid 51
kuupäev time.730 spid51 *
kuupäev time.730 spid51 *
kuupäev time.730 spid51 * erand aadress = 00007FFC270236D5 Module(sqllang+00000000005036D5)
kuupäev time.730 spid51 * erand Code c0000005 EXCEPTION_ACCESS_VIOLATION =
kuupäev time.730 spid51 * aadressi 0000006F00620074 lugemisel ilmnes juurdepääsurikkumine
kuupäev time.730 spid51 * Input puhver 136 baiti -
kuupäev time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP] "
kuupäev time.730 spid51 *
kuupäev time.730 spid51 *

Lahendus

Koondvärskenduse teave

See probleem on kõrvaldatud järgmised värskendused:
Soovitus: Installige uusim koondvärskendus SQL Server

Iga uue SQL serveri koondvärskendus sisaldab kõiki Kiirparandusi ja kõiki turbeparandusi, mis sisaldusid eelmises koondvärskenduses. Vaadake SQL serveri kumulatiivseid värskendusi:
Olek
Microsoft on kinnitanud, et see probleem esineb jaotises "Kehtib järgmiste toodete kohta" loetletud Microsofti toodetel.
Viited
Teave selle terminoloogia mida Microsoft kasutab tarkvaravärskenduste kirjeldamiseks.

Hoiatus. See artikkel on masintõlgitud.

Ominaisuudet

Artikkelin tunnus: 3138930 – Viimeisin tarkistus: 05/31/2016 10:29:00 – Versio: 3.0

Microsoft SQL Server 2012 Service Pack 3, Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3138930 KbMtet
Palaute