2014-09-29 62 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) 
相關問題