2009-02-25 7 views
6

Je suis en train de créer une table de base salaire (BP) avecComment créer une contrainte de vérification entre deux colonnes dans 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) 
); 

Comme vous pouvez le voir près de la fin, je veux vérifier si upperlimit est supérieur à lowerlimit, comment puis-je faire?

Répondre

6

Cela dépend (probablement) de la base de données que vous utilisez.

comparaison à la syntaxe oracle (par exemple ici: http://www.techonthenet.com/oracle/check.php), ce qui vous manque peut-être un '' entre NULL et CONTRAINTE

+0

Oh oui! qui l'a fait, merci :) – Unknown

+0

J'avais fait la même erreur. Merci :) +1 – Pavitar

1

est ici appropriée la requête 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)); 

Remarque la virgule après NOT NULL et CONSTRAINT dans la dernière ligne.

1

Le problème est que vous l'avez défini comme une contrainte de niveau de colonne mais qu'il fait référence à d'autres colonnes. Vous devez définir une contrainte au niveau de la table.

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

Pourquoi? Quel genre de différences cela ferait-il? – Unknown