2014-09-29 92 views
5

我有一个表中有两个数字列的SQL Server。至少必须填写其中一个数字字段。我如何编写一个检查约束来验证这一点?我需要一个检查约束两列,至少有一个不能为空

+1

可能的重复[[列之间的两列之一s应该不是NULL。如何在模式中执行它?](http://stackoverflow.com/questions/7017871/one-of-the-column-between-two-columns-should-be-not-null-how-to-enforce-it -in-s) – JohnnyHK 2016-03-10 00:16:24

+0

@JohnnyHK不重复,因为这个问题是关于'两个中的至少一个',而且一个关于'只有一个' – nahab 2017-03-15 10:46:34

回答

12

这可以用验证空值,并用结果或

create table #t (i int 
       , j int 
       , constraint chk_null check (i is not null or j is not null)) 

下面是测试用例

insert into #t values (null, null) --> error 
insert into #t values (1, null) --> ok 
insert into #t values (null, 1) --> ok 
insert into #t values (1, 1) --> ok 
0

末的答案相匹配的检查约束来实现,但这里是一个解决方案对于任何数量的列来检查Sql Server:

CONSTRAINT CK_one_is_not_null CHECK (COALESCE(col1, col2, col3) IS NOT NULL) 
相关问题