現象
Microsoft SQL Server 2012 または SQL Server 2014 でテーブル変数にカーソルを使用するストアド プロシージャを作成するとします。 また、ストアド プロシージャは、カーソルと共に WHERE CURRENT OF ステートメントを使用してテーブルを更新します。
たとえば、ストアド プロシージャは次のようになります。
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
sp_refreshsqlmodule システムのストアド プロシージャを使用してストアド プロシージャを実行すると、アクセス違反が発生し、次のようなエラー メッセージが表示される場合があります。
注
メッセージ 596、レベル 21、状態 1セッションが kill 状態にあるため、実行を続行できません。メッセージ 0、レベル 20、状態 0現在のコマンドで重大なエラーが発生しました。 結果がある場合は破棄する必要があります。
この場合、次のようなエラーも SQL Server エラー ログに書き込まれます。
注
date time.730 spid51 SqlDumpExceptionHandler: プロセス 51 で致命的な例外が生成されました c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server はこのプロセスを終了しています。
date time.730 spid51 * *******************************************************************************
date time.730 spid51 *
date time.730 spid51 * スタック ダンプの開始:
date time.730 spid51 * date time spid 51
date time.730 spid51 *
date time.730 spid51 *
date time.730 spid51 * 例外アドレス = 00007FFC270236D5 module(sqllang+00000000005036D5)
date time.730 spid51 * 例外コード = c0000005 EXCEPTION_ACCESS_VIOLATION
date time.730 spid51 * Access Violation occurred reading address 0000006F00620074
date time.730 spid51 * 入力バッファー 136 バイト -
date time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo].[usp_TestSP]'
date time.730 spid51 *
date time.730 spid51 *
解決策
累積的な更新プログラムの情報
この問題は以下の更新プログラムで修正されています。
- SQL Server 2014 の累積的な更新プログラム 13
- SQL Server 2014 Service Pack 1 (SP1) の累積的な更新プログラム 6
- SQL Server 2012 Service Pack 3 (SP3) の累積的な更新プログラム 2
- SQL Server 2012 Service Pack 2 (SP2) の累積的な更新プログラム 11
推奨事項: SQL Server の最新の累積的な更新プログラムをインストールする
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
- SQL Server 2014 の最新の累積的な更新プログラム
- SQL Server 2014 SP1 の最新の累積的な更新プログラム
- SQL Server 2012 SP2 の最新の累積的な更新プログラム
- SQL Server 2012 SP3 の最新の累積的な更新プログラム
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。