加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 操作数数据类型void类型对sum运算符无效

发布时间:2020-12-12 08:44:58 所属栏目:MsSql教程 来源:网络整理
导读:我对使用null有疑问. 如果我运行此查询 SELECT SUM(x)FROM (SELECT NULL AS x) AS DerivedTable 我收到错误消息 “Operand data type void type is invalid for sum operator.” 但是,如果我创建一个具有可空字段的表并在sum聚合中使用它,它将忽略NULL值并基
我对使用null有疑问.

如果我运行此查询

SELECT SUM(x)
FROM (SELECT NULL AS x) AS DerivedTable

我收到错误消息

“Operand data type void type is invalid for sum operator.”

但是,如果我创建一个具有可空字段的表并在sum聚合中使用它,它将忽略NULL值并基本上将所有其余记录相加.

CREATE TABLE #temp1(x int)
insert into #temp values (NULL),(3),(5)

SELECT SUM(x) FROM #temp1

结果是8.

这个有合理的解释吗?
是不是因为NULL的数据类型还没有在派生表的查询中声明但是用temp表声明了?
另外,我真的想知道从表或派生表运行时是否有办法产生此错误消息,就像第二个#temp1示例一样.从表或表表达式运行时产生此错误消息的任何示例都非常受欢迎.

谢谢你们

解决方法

这确实是因为在派生表方案中无法推断列的类型.

如果更改语句并在列上显式使用类型,则select将起作用.

SELECT SUM(x) FROM (SELECT CAST(NULL AS INTEGER) AS x) AS DerivedTable

以及可以推断出类型的以下语句

SELECT SUM(x) FROM (SELECT NULL AS x UNION SELECT 1) AS DerivedTable

SQL Fiddle

这也可以回答你的第二个问题.由于无法在不声明类型的情况下创建表,因此无法生成会生成该特定错误消息的语句.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读