应用对象
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Developer SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2008 R2 Express SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Enterprise Core

Microsoft 将 Microsoft SQL Server 2008 R2 Service Pack 2 (SP2)修复为一个可下载文件。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2008 R2 Service Pack 2 修复版本附带的所有修补程序和所有安全修补程序。

症状

在 Microsoft SQL Server 2008 R2 SP2 或 Microsoft SQL Server 2012 中运行查询时,如果存在以下情况,则可能会收到错误的结果:

  • 查询对完整联接子句的结果使用交叉应用子句。

  • 通过在 完整的 JOIN 子句中调用表值用户定义的函数来提供表数据。

  • 函数接受列名称作为参数,并以表的形式返回结果。

例如,你可以运行类似于以下内容的查询:

SELECT * FROM tablename CROSS APPLY (    SELECT * FROM        (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1     FULL JOIN         (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2     ON s1.nodeName = s2.nodeName    ) s  

注意 Microsoft SQL Server 2012 中不会出现此问题。

解决方案

累积更新信息

SQL Server 2012 累积更新7

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

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

2692828 在 SQL Server 2012 发布后发布的 SQL Server 2012 版本

SQL Server 2012 SP1 的累积更新3

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

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

2772858 在发布 SQL Server 2012 Service Pack 1 之后发布的 SQL Server 2012 版本

SQL Server 2008 R2 SP2 的累积更新5

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

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

2730301 发布 SQL Server 2008 R2 Service Pack 2 后发布的 SQL Server 2008 R2 版本

状态

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

解决方法

若要解决此问题,请使用 完整的 MERGE JOIN 子句,而不是 完整的 JOIN 子句。例如,您将 "症状" 部分中提及的查询更改为该查询,如下所示:

SELECT * FROM tablename CROSS APPLY (    SELECT * FROM        (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1     FULL MERGE JOIN         (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2     ON s1.nodeName = s2.nodeName    ) s 

更多信息

有关如何使用 跨应用 子句的详细信息,请转到以下 Microsoft TechNet 网站:

有关如何使用跨应用子句的常规信息

需要更多帮助?

需要更多选项?

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