2012-03-01 10 views

答えて

7

あなたは、テーブルレベルCHECK constraintでこれを実装することができます。

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

既に強調されていますが、特定の質問に基づいてサンプルコードを追加する価値があります。 –

+0

@Damien_The_Unbeliever良いアドバイスが追加されました... –

+0

奇数...これを試すと、エラーが発生します。ALTER TABLEステートメントがCHECK制約CK_YourCheckと競合しました。ステートメントは、存在しない制約とどのように競合しますか?あなたが疑問に思っている場合には、私は今のところ制約を破らない場所でデータを再確認しました。 – keithwarren7

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

、これは意味合いとして知られている:implcation法を適用

IF x THEN y 

、上記の本に変換することができます。

(NOT (x)) OR y 

あなたの式を代入します:

IF column B is equal to 12,13 or 14 THEN A cannot be 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:

ド・モルガンの法則を適用する

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

:SQL式を代入

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

:implcation法を適用します

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

誰かがなぜこの1つがdownvoted得たか知っていますか? – onedaywhen

関連する問題