我正在使用 Microsoft SQL Server Management Studio。所以这就是我现在所拥有的:
CREATE TABLE Product
(
product_id INT NOT NULL PRIMARY KEY IDENTITY,
product_code CHAR(4) NOT NULL, --For a book use 'BOOK'
product_name VARCHAR(40) NOT NULL,
product_desc VARCHAR(5000),
book_author INT,
book_publisher INT,
product_price SMALLMONEY NOT NULL CHECK (product_price >= 0),
FOREIGN KEY (book_author) REFERENCES Author
);
因此,如果 product_code == 'BOOK',我想让 book_author 和 book_publisher 不能为空。
这可能吗?如何实现?
最佳答案
我会这样做:
CREATE TABLE Product (
product_id INT NOT NULL PRIMARY KEY IDENTITY
, product_code CHAR(4) NOT NULL
, product_name VARCHAR(40) NOT NULL
, product_desc VARCHAR(5000)
, book_author INT
, book_publisher INT
, product_price SMALLMONEY NOT NULL CHECK (product_price >= 0)
, CONSTRAINT CHK_author CHECK (
CASE
WHEN product_code = 'BOOK' AND (book_author IS NULL OR book_publisher IS NULL) THEN 0
ELSE 1
END = 1
)
);
CHK_author
约束将检查您的 product_code
是否为 BOOK
,如果是,则检查 book_author
或 book_publisher
是 NULL
值。如果其中之一是 - 它将限制声明。
这是 SQL Fiddle
关于SQL - 创建表时,如何在另一列满足特定要求时使其成为必需列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690681/