5

Tôi đang cố gắng tạo bảng trong đó các giá trị trong một cột không được lớn hơn cột tiếp theo. Ví dụ, tôi đang tạo bảng sau đây.Giá trị của một cột không thể lớn hơn một giá trị khác

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

Và giá hiện tại không được lớn hơn giá gốc.

Vì vậy, những gì tôi đã cố gắng làm là

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

Nhưng điều này mang lại cho tôi những lỗi sau:

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. 

Tôi không được phép tham khảo một cột trong cùng một bảng?

Trả lời

8

Chỉ cần thay đổi nó thành ràng buộc mức bảng thay vì ràng buộc cột.

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

Bạn cũng có thể thêm sau, ví dụ:

ALTER TABLE Price ADD CHECK (CurrentPrice <= OriginalPrice); 
--or 
ALTER TABLE Price ADD CONSTRAINT CK_Price_Current_vs_Original 
    CHECK (CurrentPrice <= OriginalPrice); 
Các vấn đề liên quan