2016-09-29 3 views
0

Ich habe eine Tabelle namens Phone, die zwei Spalten Number varchar(32) und Extension varchar(32) hat. Ich möchte ein Constraint mit den folgenden Kriterien hinzufügen:Hinzufügen einer Abhängigkeit basierend auf zwei Spalten

  1. Telefonnummer ist erforderlich, wenn die Erweiterung nicht zur Verfügung gestellt wird.
  2. Die Erweiterung ist erforderlich, wenn die Telefonnummer nicht angegeben ist.
  3. Sowohl Telefonnummer und Erweiterung können zur Verfügung gestellt werden.

Ich habe die folgende Constraint alle drei Anforderungen zu erfüllen:

ALTER TABLE Phone 
ADD CONSTRAINT RequirePhone 
CHECK (
    Number IS NULL AND EXTENSION IS NOT NULL 
    OR (Number IS NOT NULL AND Extension IS NULL) 
); 

Die obige constraint die ersten beiden Anforderungen erfüllt, aber wenn ich Number und Extension stelle ich Constraint Exception.

Ich habe das Hinzufügen versucht:

... 
OR (Number IS NULL AND Extension IS NULL) 

Aber ich immer noch die gleichen Fehler.

Irgendwelche Vorschläge, wie ich das lösen kann?

Antwort

4

Hat nicht die letzte Klausel hat

OR (Number is NOT NULL AND Extension IS NOT NULL) 
+0

Ja - mit diesem anstelle von IS NULL können Sie beide einfügen, aber Sie können nicht NULL, NULL einfügen. –

+0

Das war es, was ich ausprobieren wollte. Vielen Dank. – smr5

1

(1) .. (3) entspricht beiden NULLs sein wird forbideen alles andere in Ordnung ist.

ALTER TABLE Phone 
ADD CONSTRAINT RequirePhone 
    CHECK (Number IS NOT NULL OR Extension IS NOT NULL) 
); 
+0

Sergs Antwort sollte die richtige (aber prägnante) sein. – jyao

Verwandte Themen