症状
请考虑以下情况:
-
您的计算机安装了 Microsoft SQL Server 2012。
-
您有一个查询,其中包含SELECT语句中的Case语句和GROUP BY语句中的case语句。
-
两个 CASE 语句的计算结果为 NULL。
-
您运行查询。
在这种情况下,您会收到以下错误消息:
Msg 8120、Level 16、State 1、Line 3Column "<> 列名 在 select 列表中无效,因为它不包含在 aggregate 函数或 group by 子句中。
例如,运行以下查询:create database testgouse testgocreate table tvt ( v1t binary(1) null)create table tln (ln numeric(5) not null)goselectcase when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endfrom (select t2.v1t as col1, 10 as col2 from tvt t2) t1group by case when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endgo 在查询中,语句 "第 1 = 2 后 t1. col1 else 10" 的计算结果为10。 使用 NULL 替换 "10" 时,会出现此问题。注意当从SELECT语句或GROUP BY语句中删除两个CASE语句时,不会出现此问题。
解决方案
应用修补程序后,必须启用跟踪标记才能使修复程序正常工作。 如果需要应用此修补程序,请与 Microsoft 支持人员联系。
在 SQL Server 的以下累积更新中,此问题首先已修复。
SQL Server 2012 SP1 的累积更新6 /en-us/help/2874879
SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。