現象
Microsoft SQL Server 2012 または SQL Server 2014 のテーブル変数にカーソルを使用するストアドプロシージャを作成することを前提としています。 さらに、ストアドプロシージャは、現在のステートメントの現在の位置 をカーソルと共に使用して、テーブルを更新します。たとえば、ストアドプロシージャは次のようになります。
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
Sp_refreshsqlmoduleシステムストアドプロシージャを使用してストアドプロシージャを実行すると、アクセス違反が発生し、次のようなエラーメッセージが表示されることがあります。
メッセージ596、レベル21、状態1は、セッションが強制終了状態にあるため、実行を続行できません。メッセージ0、レベル20、現在のコマンドで状態0A 重大なエラーが発生しました。 結果は破棄する必要があります。
この状況では、次のようなエラーも SQL Server のエラーログに書き込まれます。
日付/時刻 spid51 SqlDumpExceptionHandler: プロセス51で、致命的な例外 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] "日付時刻 spid51 * 日付/時刻 spid51 *
解決方法
累積的な更新プログラムの情報
この問題は、次の更新プログラムで修正されています。
-
SQL Server 2014 の累積更新プログラム 13
-
SQL Server 2014 Service Pack 1 (SP1) の累積更新プログラム 6
-
SQL Server 2012 Service Pack 3 (SP3) の累積更新プログラム 2
-
累積更新プログラム 11 SQL Server 2012 Service Pack 2 (SP2)
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。