9

1つの列の値が次の列より大きくならないテーブルを作成しようとしています。たとえば、次のテーブルを作成しています。

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.

同じテーブルの列を参照することはできませんか?

4

1 に答える 1

14

列の制約ではなく、テーブル レベルの制約に変更するだけです。

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);
于 2012-11-15T02:09:17.023 に答える