修复 ︰ 访问冲突时执行的存储的过程,SQL Server 中的表变量上使用游标

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3138930
症状
假设您创建表中的变量 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系统执行存储的过程时存储的过程中,可能会出现访问冲突,并且您可能会收到类似于以下内容的错误消息 ︰
Msg 596,级别 21 因为会话处于终止状态,状态 1Cannot 继续执行。消息级别 20 0 上当前命令的状态 0A 严重时出错。结果,如果有,应该被丢弃。

在此情况下,类似于下面这样的错误也被写入 SQL Server 错误日志 ︰
日期 time.730 spid51 SqlDumpExceptionHandler ︰ 进程 51 产生致命异常 c0000005 EXCEPTION_ACCESS_VIOLATION。SQL Server 将终止此过程。
date time.730 spid51 * *******************************************************************************
日期 time.730 spid51 *
日期 time.730 spid51 * 开始堆栈转储 ︰
日期 time.730 spid51 * 日期时间 spid 51
日期 time.730 spid51 *
日期 time.730 spid51 *
日期 time.730 spid51 * 异常地址 = 00007FFC270236D5 Module(sqllang+00000000005036D5)
日期 time.730 spid51 * 异常代码 = c0000005 EXCEPTION_ACCESS_VIOLATION
日期 time.730 spid51 * 读取地址 0000006F00620074 时发生访问冲突
日期 time.730 spid51 * 输入缓冲区 136 字节-
日期 time.730 spid51 * 执行 sp_refreshsqlmodule N [dbo]。[usp_TestSP]
日期 time.730 spid51 *
日期 time.730 spid51 *

解决方案

累积更新信息

此问题已解决以下更新 ︰
建议 ︰ 设置 SQL Server 的累积更新

SQL Server 的每个新累积更新包含所有修补程序和所有安全修补程序,已包含在以前的累积更新。为 SQL Server,请查阅最新的累积更新 ︰
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。
参考
了解有关 术语 Microsoft 用于描述软件更新。

属性

文章 ID:3138930 - 上次审阅时间:05/31/2016 06:54:00 - 修订版本: 4.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 KbMtzh
反馈