检查约束以确切地确认一个不是NULL

时间:2015-05-04 21:06:37

标签: sql-server tsql check-constraints

我有一个包含CompaniesIdHotelsId列的表格。我想写一个检查约束,确认其中一列是空的而另一列不是。

我尝试了以下表达式:

(CompaniesId is null) <> (HotelsId is null)

当我尝试在SSMS的Check Constraints对话框中保存时,我收到了有用的消息:

  

验证约束'CK_CostingLineItemVendors'时出错。

有人可以用我的语法帮助我吗?

修改

根据文章IS [NOT] NULL (Transact-SQL)IS NULLIS NOT NULL的结果为Boolean。这就是为什么我认为我可以比较这些结果的平等。

2 个答案:

答案 0 :(得分:3)

T-SQL没有可用的布尔类型。您不能拥有一个具有布尔类型的表达式,并且希望像任何其他表达式一样使用它。你似乎可以使用布尔表达式(如WHERE)的T-SQL中的所有位置都是语法中的硬编码位置。 (是的,这是一个没有特殊原因的缺陷。)

只是滥用一点或int作为布尔:

IIF(CompaniesId is null, 1, 0) <> IIF(HotelsId is null, 1, 0)

IIF是一个内在函数,它可以将条件作为CASE之类的第一个参数。你不能自己定义这样的功能。

答案 1 :(得分:2)

这有效:

   (CompaniesId is null AND HotelsId is not null) 
OR (CompaniesId is not null AND HotelsId is null)