gpt4 book ai didi

sql - T-SQL : CHECK constraint not working

转载 作者:行者123 更新时间:2023-12-02 07:46:38 25 4
gpt4 key购买 nike

我有以下 T-SQL 模式。我遇到的问题是 Download 表上的检查约束不起作用。我仍然能够将记录插入到该表中,其中包含 ProductIdCategoryIdNULL 值。为什么会这样?

我希望 ProductIdCategoryId 列都允许 NULL 值,但是对于任何给定的记录,只允许其中一个是设置为NULL,另一个需要是CategoryProduct表的对应Id。

CREATE TABLE Category (
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Description nvarchar(100) NULL,
ParentCategoryId int NULL
CONSTRAINT fk_CategoryId_CategoryId FOREIGN KEY (Id) REFERENCES Category(Id)
)
GO

CREATE TABLE Product (
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Title nvarchar(100) NOT NULL,
TagLine nvarchar(MAX) NOT NULL,
Description nvarchar(MAX)NULL,
CategoryId int NOT NULL,
ImageUrl nvarchar(255) NULL,
Keywords nvarchar(200) NOT NULL

CONSTRAINT fk_ProductCategoryId_CategoryId FOREIGN KEY (CategoryId) REFERENCES Category(Id)
)
GO

CREATE TABLE Download (
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Title nvarchar(100) NOT NULL,
Description nvarchar(MAX) NULL,
CategoryId int NULL,
ProductId int NULL,
DownloadUrl nvarchar(255) NOT NULL,

CONSTRAINT fk_DownloadCategoryId FOREIGN KEY (CategoryId) REFERENCES Category(Id),
CONSTRAINT fk_DownloadProductId FOREIGN KEY (ProductId) REFERENCES Product(Id),
CONSTRAINT chk_ReferencesCategoryOrProduct CHECK (ProductID != NULL AND CategoryId != NULL)
)
GO

最佳答案

使用:

CONSTRAINT chk_ReferencesCategoryOrProduct CHECK (ProductID IS NOT NULL 
OR CategoryId IS NOT NULL)

NULL 不是值——它是缺少值的占位符。这就是为什么您需要使用特定的语法来检查它。

关于sql - T-SQL : CHECK constraint not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com