2010-07-14 4 views

Répondre

6

Quelque chose comme ceci:

ALTER TABLE foo WITH CHECK ADD 
    CONSTRAINT CK_Foo_reason CHECK (
     ColA IS NOT NULL AND ColB IS NULL 
     OR 
     ColA IS NULL AND ColB IS NOT NULL 
     ) 

Edit: après la mise à jour de question

Cela dépend si les deux colonnes sont autorisées NULL dans ce cas

 ColA IS NULL OR ColB IS NULL 

Edit 2 : Pour 3 colonnes, dont une doit être NOT NULL

Pas de smarty-pantalons répondre J'ai peur. J'ai ajouté des espaces pour faire l'espérons plus clairement

ALTER TABLE foo WITH CHECK ADD 
    CONSTRAINT CK_Foo_reason CHECK (
     ColA IS NOT NULL AND ColB IS NULL  AND ColC IS NULL 
     OR 
     ColA IS NULL  AND ColB IS NOT NULL AND ColC IS NULL 
     OR 
     ColA IS NULL  AND ColB IS NULL  AND ColC IS NOT NULL 
     ) 
+0

Lecture sa question, il me semblait qu'il ne veut être NOT NULL à un moment –

+0

@Tom H: vrai. Ceci est mon 2ème cas qui correspond à la vôtre qui permet à la fois NULL. – gbn

+0

Si j'ai 3 valeurs, disons une colonne C, quelle sera la condition de contrainte? – Melursus

0

Cela semblait fonctionner pour moi:

CREATE TABLE dbo.Test_Constraint 
(
    a INT NULL, 
    b VARCHAR(10) NULL, 
    CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL) 
) 
+0

Bon appel sur ma réponse Tom. J'ai oublié tout ça. –

Questions connexes