SQL

操作数数据类型的无效类型对于求和运算符无效

发布于 2021-06-04 17:06:50

我将对null的使用有疑问。

如果我运行此查询

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

我收到错误消息

“操作数数据类型无效类型对于求和运算符无效。”

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

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

SELECT SUM(x) FROM #temp1

结果是8。

有没有对此的合乎逻辑的解释?是否会因为没有在派生表的查询中声明NULL而是在temp表中声明而导致数据类型为NULL?另外,我真的很想知道从表或派生表运行时是否有办法生成此错误消息,就像第二个#temp1示例一样。非常欢迎从表或表表达式运行时产生此错误消息的任何示例。

谢谢你们

关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-06-04
    为面试而生,有面试问题,就找面试哥。

    实际上,这是因为 无法 在派生表方案中 推断列类型

    如果更改语句并在列上明确使用类型,则选择将起作用。

    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
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看