我想添加一个约束,检查SQL Server中是否有三列同时为空。
我写了这个:
ALTER TABLE Measures
ADD CHECK (Temperature <> NULL AND Humidity <> NULL AND Airpressure <> NULL);
但它失败了。有什么帮助吗?
答案 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