如何在SQL Server的同时检查多个值是否为null

时间:2018-04-23 18:32:26

标签: sql-server constraints

我想添加一个约束,检查SQL Server中是否有三列同时为空。

我写了这个:

ALTER TABLE Measures
ADD CHECK (Temperature <> NULL AND Humidity <> NULL AND Airpressure <> NULL);

但它失败了。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

您不能将<>用于NULL。您使用IS NOT NULL

ALTER TABLE Measures ADD CHECK (Temperature IS NOT NULL OR Humidity IS NOT NULL OR Airpressure IS NOT NULL);

通常,我会在评论中回答这个问题。但有两点需要重点。首先,您希望至少有一列为NOT NULL,因此OR是适当的逻辑,而不是AND

其次,检查约束条件与WHERE条件和WHEN条件不同。对于后者,NULL值被视为&#34; false&#34;。对于CHECK约束,NULL值被视为&#34;有效&#34; - 约束通过。我不确定原因,但是你的表达总会返回NULL,所以它总是会通过。

答案 1 :(得分:0)

你也可以使用合并,例如:

COALESCE (Temperature, Humidity, Airpressure) IS NOT NULL