KB2933103 - 修复:在 SQL Server 中执行指定 TOP N 和 ORDER BY 的查询时断言失败

应用对象
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard 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 2008 R2、SQL Server 2012 或 SQL Server 2014。 使用 TOP N 和 ORDER BY 执行查询时,查询遇到类似于以下内容的断言失败:

注意

位置: “qstopsrt.cpp”:384
表达式:fFalse
SPID: <SPID>
Process ID: <ProcessID>
位置: qxcntxt.cpp:1052
表达式: cref == 0
SPID: <SPID>
Process ID: <ProcessID>
消息 3624,级别 20,状态 1,行 2
系统断言检查失败。 查看 SQL Server 错误日志了解详细信息。 断言失败通常是由软件 bug 或数据损坏导致的。 若要检查数据库损坏,请考虑运行 DBCC CHECKDB。 如果你同意在安装过程中向 Microsoft 发送转储,则将向 Microsoft 发送一个小型转储。 更新可能来自最新 Service Pack 中的 Microsoft 或技术支持的 QFE 中提供。
消息 0,级别 20,状态 0,行 0
当前命令上发生严重错误。 如果有结果,应丢弃。

注意:此修补程序还可能适用于查询计划包含“排序 (前 N 个排序) ”的情况。

原因

发生此问题的原因是查询执行引擎中出现内部错误。

解决方法

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

SQL Server 2012 SP2 累积更新 1 /en-us/help/2976982

SQL Server 2014 累积更新 2 /en-us/help/2967546

SQL Server 2012 SP1 累积更新 10 /en-us/help/2954099

SQL Server 2008 R2 SP2 累积更新 12 /en-us/help/2938478

关于 SQL Server 的累积更新

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

      

状态

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