2012-03-01 191 views

回答

7

你可以用一個臺級CHECK constraint實現這個:

ALTER TABLE YourTable 
ADD CONSTRAINT CK_YourCheck 
CHECK(ColumnA IS NOT NULL OR ColumnB NOT IN (12, 13, 14)) 
+1

已經upvoted,但可能值得添加基於特定問題的示例代碼。 – 2012-03-01 19:37:42

+0

@Damien_The_Unbeliever好的建議,加... – 2012-03-01 19:42:30

+0

奇怪...當我嘗試這個我得到的錯誤ALTER TABLE語句與CHECK約束CK_YourCheck衝突...語句如何與不存在的約束衝突。而且如果你想知道,我沒有仔細檢查數據,現在不違反約束條件。 – keithwarren7 2012-03-01 19:52:21

1

是的,你可以這樣做使用Check Constraint

像這樣的事情?

ADD CONSTRAINT check validCHECK ( 
     ((B BETWEEN 12 and 14) AND A IS NOT NULL) 
     OR B NOT BETWEEN 12 and 14 
    ); 
0

在一階邏輯,這是被稱爲含義:

IF x THEN y 

運用implcation法,上述可轉化爲這樣:

(NOT (x)) OR y 

代您的表達式:

IF column B is equal to 12,13 or 14 THEN A cannot be null 

運用implcation法:

(NOT (column B is equal to 12,13 or 14)) OR A cannot be null 

代SQL表達式:

(NOT (B IN (12, 13, 14))) OR (NOT (A IS NULL)) 

應用德摩根定律:

(NOT x) OR (NOT y) is equivlent to NOT (x AND y) 

因此:

NOT (B IN (12, 13, 14) AND A IS NULL) 

SQL DDL:

ALTER TABLE YourTable ADD 
    CONSTRAINT your_rule 
     CHECK (NOT (B IN (12, 13, 14) AND A IS NULL)); 
+0

任何人都知道爲什麼這一個downvoted? – onedaywhen 2012-03-05 16:13:27

相關問題