Как создать проверочное ограничение между двумя столбцами в SQL? - PullRequest
6 голосов
/ 25 февраля 2009

Я пытаюсь создать таблицу Basic Pay (BP) с

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)
 );

Как вы можете видеть в конце, я хочу проверить, если upperlimit больше lowerlimit, как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 25 февраля 2009

Это может (вероятно, зависит) от используемой вами базы данных.

По сравнению с синтаксисом оракула (например, здесь: http://www.techonthenet.com/oracle/check.php), то, что вам не хватает, может быть ',' между NULL и CONSTRAINT

1 голос
/ 25 февраля 2009

Проблема в том, что вы определили его как ограничение уровня столбца, но оно ссылается на другие столбцы. Вы должны определить ограничение на уровне таблицы.

ALTER TABLE bp
    ADD CONSTRAINT CK_limit CHECK ( upperlimit > lowerlimit)
1 голос
/ 25 февраля 2009

Вот правильный 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));

Обратите внимание на запятую после NOT NULL и CONSTRAINT в последней строке.

...