KB3138930 - 修正: SQL Server のテーブル変数でカーソルを使用するストアド プロシージャを実行するとアクセス違反が発生する

適用先
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)

現象

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 の最新の累積的な更新プログラムをインストールする

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。

      

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。