2014-12-03 72 views
0

我有兩列如下表:如何執行排除約束?

A - int (null) 
B - int (null) 

應該有A或B值,但不能同時使用。我如何創建這個約束?

沒有額外的IDENTITY列,有沒有一種方法來強制在這個表上的複合主鍵由於兩個空列被允許?

+0

你所說的「複合主鍵」是什麼意思?是否需要唯一性? – 2014-12-03 17:14:31

+0

這是一個複合主鍵。所以是的 - 它應該是獨一無二的。 – 4thSpace 2014-12-03 17:23:42

+0

什麼應該是唯一的? '(A,B)'或'A UNION ALL B'的組合? – 2014-12-03 18:10:06

回答

1
create table t 
( 
    a int, 
    b int, 
    CONSTRAINT null_const CHECK ((a is not null and b is null) or 
           (b is not null and a is null)) 
); 
+0

謝謝。你是否也可以顯示覆合主鍵? – 4thSpace 2014-12-03 17:27:58

+0

此語法在約束中創建錯誤:列'b'引用另一列表't'。 – 4thSpace 2014-12-03 17:48:55

+0

適用於我:http://sqlfiddle.com/#!3/f976b/1 – 2014-12-03 17:52:57