2009-02-25 18 views
6

Ich versuche, einen Grundgehalt (BP) Tabelle mitWie erstellt man eine Prüfbedingung zwischen zwei Spalten in SQL?

CREATE TABLE bp (
    bpid  VARCHAR(5), 
     FOREIGN KEY (bpid) REFERENCES designation(desigid), 
    upperlimit DECIMAL(10,2) NOT NULL, 
    lowerlimit DECIMAL(10,2) NOT NULL, 
    increment DECIMAL(10,2) NOT NULL 
     CONSTRAINT llvalid CHECK (upperlimit > lowerlimit) 
); 

zu erstellen, wie Sie in der Nähe des Ende sehen können, möchte ich überprüfen, ob upperlimit größer als lowerlimit, wie kann ich das tun?

Antwort

6

Es hängt möglicherweise (wahrscheinlich) von der Datenbank ab, die Sie verwenden.

Vergleich zum Orakel Syntax (zB hier: http://www.techonthenet.com/oracle/check.php), was Sie vermissen könnte ein '' zwischen NULL und CONSTRAINT sein

+0

Oh ja! das tat es, danke :) – Unknown

+0

Ich hatte den gleichen Fehler gemacht.Danke :) +1 – Pavitar

1

Hier ist die eigentliche SQL-Abfrage ...

CREATE TABLE bp (bpid VARCHAR(5), 
FOREIGN KEY (bpid) REFERENCES designation(desigid), 
upperlimit DECIMAL(10,2) NOT NULL, 
lowerlimit DECIMAL(10,2) NOT NULL, 
increment DECIMAL(10,2) NOT NULL, 
CONSTRAINT llvalid CHECK (upperlimit > lowerlimit)); 

Hinweis das Komma nach NOT NULL und CONSTRAINT in der letzten Zeile.

1

Das Problem ist, dass Sie es als Einschränkung auf Spaltenebene definiert haben, es verweist jedoch auf andere Spalten. Sie müssen eine Einschränkung auf Tabellenebene definieren.

ALTER TABLE bp 
    ADD CONSTRAINT CK_limit CHECK (upperlimit > lowerlimit) 
+0

Warum? Welche Art von Unterschieden würde es machen? – Unknown

Verwandte Themen