这段代码工作正常:
select fk,max(case when 1 = 0 then 1 else null end) maxx from (values(1,null),(1,null)) x(fk,a) group by fk;
输出:
fk maxx ----------- ----------- 1 NULL
有:
警告:聚合或其他SET操作消除了空值.
但是这段代码:
select fk,max(a) maxx from (values(1,a) group by fk;
给出错误:
Msg 8117,Level 16,State 1,Line 5
操作数数据类型NULL对于max运算符无效.
解决方法
在第一种情况下,您隐式指定数据类型,即整数.这是从那时永远无法达到的推断.对于sql server来说,当时不会被执行的事实并不重要.
In fact,sql server确定返回类型的方式:“result_expressions中的类型集合中最高的
precedence类型和可选的else_result_expression”.因此,在实际执行之前选择返回类型,从then和else返回的所有潜在数据类型中选择.换句话说,在sql server’实现’之前,有些语句不可能达到.
由于数据类型是已知的,因此可以应用max.
在第二种情况下,您没有指定数据类型,因此sql server无法知道如何实现max. varchar的max与整数的max不同.
原文地址:https://www.jb51.cc/mssql/77576.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。