应用对象
SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup

Microsoft 以一个可下载文件的形式分发 Microsoft SQL Server 2008 R2 修补程序。 由于修补程序是累积的,因此每个新版本都包含了以前的 SQL Server 2008 R2 修补程序版本附带的所有修补程序和所有安全修补程序。

症状

在 Microsoft SQL Server 2008 R2 中,当运行使用 APPLY 运算符的复杂查询时,可能会收到不一致的结果。 注意 如果在查询中使用 "强制顺序 查询" 提示,则会在此情况下收到正确的结果。

原因

出现此问题的原因是,查询优化器为查询选择了不正确的执行计划。 查询优化器针对执行计划的物理运算符中的多列处理 GROUP BY谓词。 但是,该运算符将输出输出列表中的所有分组列,并且不会对所有这些列进行分组。 因此,查询可能会返回不正确的结果。 注意 流聚合运算符是一个物理运算符的示例。例如,查询优化器在内部通过 ColA、ColB子句在下表中生成 GROUP:

ColA

ColB

0

0

0

1

查询优化程序可能错误地生成同时返回ColAColB列的执行计划。 这些列按输出列表中的ColA列分组。 在此示例中,如果ColA列中的值为0,查询可能会在ColB列中随机返回01

解决方案

累积更新信息

SQL Server 2008 R2

此问题的修补程序首次在累积更新5中发布。有关如何为 SQL Server 2008 R2 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2438347 SQL Server 2008 R2 的累积更新程序包5 注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 修补程序版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

981356 发布 SQL Server 2008 R2 后发布的 SQL Server 2008 R2 版本

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

更多信息

若要验证是否遇到此问题,请查看有问题的查询的执行计划,然后检查组运算符。 例如,检查流聚合运算符、哈希聚合运算符、distinct 排序运算符和段运算符。 如果输出列的列表比分组列的列表长,则你遇到此问题。 

参考

有关 SQL Server 的增量服务模型的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

935897 从 SQL Server 团队提供的增量服务模型可提供报告问题的修补程序有关 SQL Server 更新的命名架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

822499Microsoft SQL Server 软件更新程序包的新命名架构有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

824684 用于描述 Microsoft 软件更新的标准术语的说明

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。