我对使用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