大多数情况下你不应该对此采取任何行动。
这只是一条信息性消息required in the SQL standard。除了向消息流添加不需要的噪音之外,它没有任何不良影响(除了意味着 SQL Server 不能绕过读取 NULL 行,它可以有 an overhead 但禁用警告并不能提供更好的执行计划这方面)
返回此消息的原因是 SQL 中的大多数操作都会传播空值。
SELECT NULL + 3 + 7 返回NULL(将NULL 视为未知量,这是有道理的,因为? + 3 + 7 也是未知的)
但是
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
返回10 和空值被忽略的警告。
但是,对于典型的聚合查询,这些正是您想要的语义。否则,单个NULL 的存在将意味着该列上所有行的聚合总是最终产生NULL,这不是很有用。
下面哪个蛋糕最重?(Image Source、Creative Commons 图片由我修改(裁剪和注释))
称完第三块蛋糕后,天平坏了,因此没有关于第四块蛋糕的信息,但仍然可以测量周长。
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
查询
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
返回
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
尽管从技术上讲,不能肯定地说 80 是最重的蛋糕的重量(因为未知数可能更大),但上述结果通常比简单地返回未知数更有用。
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
您很可能希望忽略 NULL,而警告只是提醒您这种情况正在发生。