2009-02-25 58 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)