2009-02-25 76 views
6

我想创建一个基本工资(BP)表如何在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) 
); 

正如你的结局,我想检查upperlimitlowerlimit大于看近,我该怎么办呢?

回答

6

它可能(可能确实)取决于您使用的数据库。

相较于甲骨文的语法(如这里:http://www.techonthenet.com/oracle/check.php),你缺失可能是一个 '' NULL和约束之间

+0

哦是的!这样做,谢谢:) – Unknown 2009-02-25 07:22:38

+0

我做了同样的错误。谢谢:) +1 – Pavitar 2010-12-03 13:41:25

1

下面是正确的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之后的逗号。

1

问题是,您已将其定义为列级约束,但它引用了其他列。您必须在表级别定义一个约束。

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