2009-02-25 7 views
6

Sto cercando di creare un pay di base (BP) tavolo conCome creare un vincolo di controllo tra due colonne 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) 
); 

Come si può vedere vicino alla fine, voglio verificare se upperlimit è maggiore di lowerlimit, come posso farlo?

risposta

6

Potrebbe (probabilmente) dipendere dal database utilizzato.

Confrontando la sintassi Oracle (ad esempio qui: http://www.techonthenet.com/oracle/check.php), cosa vi manca potrebbe essere un '', tra il NULL e costrizione

+0

Oh sì! lo ha fatto, grazie :) – Unknown

+0

Ho fatto lo stesso errore. Grazie :) +1 – Pavitar

1

Ecco corretta la query 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)); 

Nota la virgola dopo NOT NULL e CONSTRAINT nell'ultima riga.

1

Il problema è che è stato definito come un vincolo a livello di colonna ma fa riferimento ad altre colonne. È necessario definire un vincolo a livello di tabella.

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

Perché? Che tipo di differenze potrebbe fare? – Unknown

Problemi correlati