一列的值不能大于另一列

时间:2012-11-15 01:57:59

标签: sql-server database-design constraints check-constraints

我正在尝试创建一个表,其中一列中的值不能大于下一列。例如,我正在创建下表。

CREATE TABLE Price (
    PriceID INT PRIMARY KEY IDENTITY (1,1),
    OriginalPrice FLOAT NOT NULL,
    CurrentPrice FLOAT NOT NULL,
    Discount FLOAT,
    ShippingCost FLOAT NOT NULL,
    Tax FLOAT NOT NULL);

当前价格不能高于OriginalPrice。

所以我尝试做的是

CurrentPrice FLOAT CHECK (CurrentPrice <= OriginalPrice) NOT NULL,

但是这给了我以下错误:

Msg 8141, Level 16, State 0, Line 1
Column CHECK constraint for column 'CurrentPrice' references another column, table 'Price'.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.

我不允许引用同一个表中的列吗?

1 个答案:

答案 0 :(得分:8)

只需将其更改为表级约束而不是列约束。

CREATE TABLE Price (
    PriceID INT PRIMARY KEY IDENTITY (1,1),
    OriginalPrice FLOAT NOT NULL,
    CurrentPrice FLOAT NOT NULL,
    Discount FLOAT,
    ShippingCost FLOAT NOT NULL,
    Tax FLOAT NOT NULL,
    CHECK (CurrentPrice <= OriginalPrice));

您也可以在之后添加,例如

ALTER TABLE Price ADD CHECK (CurrentPrice <= OriginalPrice);
--or
ALTER TABLE Price ADD CONSTRAINT CK_Price_Current_vs_Original
    CHECK (CurrentPrice <= OriginalPrice);