2009-02-25 19 views
6

Próbuję utworzyć płacy podstawowej (BP) stół zJak utworzyć ograniczenie sprawdzające między dwiema kolumnami w 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) 
); 

Jak widać blisko zakończenia, chcę sprawdzić, czy upperlimit jest większa niż lowerlimit, w jaki sposób można to zrobić?

Odpowiedz

6

Może (prawdopodobnie jest) zależeć od używanej bazy danych.

Porównując do składni Oracle (np tutaj: http://www.techonthenet.com/oracle/check.php), czego brakuje może być '' między NULL i CONSTRAINT

+0

O tak! to zrobiło, dziękuję :) – Unknown

+0

Zrobiłem ten sam błąd. Dzięki :) +1 – Pavitar

1

Oto właściwe zapytanie 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)); 

Uwaga przecinek po NOT NULL i CONSTRAINT w ostatnim wierszu.

1

Problem polega na tym, że zdefiniowano go jako ograniczenie poziomu kolumny, ale odwołuje się do innych kolumn. Musisz zdefiniować ograniczenie na poziomie tabeli.

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

Dlaczego? Jakie byłyby różnice? – Unknown