KB4015561 - 修复:在执行 SQL Server 中的 END TRY 部分之前删除存储过程时出现访问冲突

应用对象
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2012 Service Pack 3 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use)

症状

请考虑以下情形:

• 您有一个存储过程,其中包含 TRY... Microsoft SQL Server 中的 CATCH 构造。
• 存储过程包括 WITH RESULT SETS 子句,由 sp_prepare 或 sp_execute 方法执行。
• 在执行 END TRY 部分之前,将删除存储过程。 这将导致类似于“找不到存储过程 <SP_Name>”的 2812 错误。

在这种情况下,SQL Server崩溃并生成 (AV) 的访问冲突,最终可能导致服务器关闭。 此外,还会在 SQL Server 错误日志文件夹中生成一个转储文件。

解决方法

此问题已在 SQL Server 的以下累积更新中修复:

SQL Server 2016 RTM 的累积更新 7

SQL Server 2016 SP1 累积更新 3

SQL Server 2014 SP2 累积更新 6

SQL Server 2014 SP1 累积更新 13

SQL Server 2012 SP3 累积更新 9

关于 SQL Server 的累积更新:

SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

SQL Server 2016 的最新累计更新

SQL Server 2014 的最新累计更新

SQL Server 2012 的最新累计更新

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语。