SQL服务器:无法添加约束
SQL Server: unable to add constraint
我正在尝试创建一个 table 并根据以下标准对价格进行分类:
- 对于类别 1,值的范围是 7 到 20(含)。
- 对于类别 2,值的范围是 20 到 50(含)。
- 对于类别 3,值的范围是 50 到 100(含)。
- 对于任何其他类别,值的范围是 100 到 350(含)。
但是我一直报错
CREATE TABLE LabTest
(
testCode char(4) not null,
name char(40) not null,
category int not null,
price decimal(30,2) not null,
ageAppropriate int not null,
constraint testCode_PK PRIMARY KEY (testCode),
constraint age_CHK check (ageAppropriate >= 0),
);
ALTER TABLE LabTest
ADD CONSTRAINT Category_CHK
CHECK (CASE Category
WHEN Price BETWEEN 7 AND 20 THEN 1
WHEN Price BETWEEN 20 AND 50 THEN 2
WHEN Price BETWEEN 50 AND 100 THEN 3
WHEN Price BETWEEN 100 AND 350 THEN 4
ELSE 0
END);
您需要将约束表述为列值等于 CASE
表达式:
ALTER TABLE LabTest
ADD CONSTRAINT Category_CHK CHECK
(
Category = CASE WHEN Price BETWEEN 7 AND 20 THEN 1
WHEN Price BETWEEN 20 AND 50 THEN 2
WHEN Price BETWEEN 50 AND 100 THEN 3
WHEN Price BETWEEN 100 AND 350 THEN 4
ELSE 0 END
);
旁注:CASE
表达式中的范围实际上是重叠的,因为 BETWEEN
两端都包含在内。因此,您所写的内容将与此相同:
CASE WHEN Price >= 7 AND Price <= 20 THEN 1
WHEN Price > 20 AND Price <= 50 THEN 2
WHEN Price > 50 AND Price <= 100 THEN 3
WHEN Price > 100 AND Price <= 350 THEN 4
ELSE 0 END
如果以上不是你想要的处理边界条件的方式,那么根据你的需要更改逻辑。
我正在尝试创建一个 table 并根据以下标准对价格进行分类:
- 对于类别 1,值的范围是 7 到 20(含)。
- 对于类别 2,值的范围是 20 到 50(含)。
- 对于类别 3,值的范围是 50 到 100(含)。
- 对于任何其他类别,值的范围是 100 到 350(含)。
但是我一直报错
CREATE TABLE LabTest
(
testCode char(4) not null,
name char(40) not null,
category int not null,
price decimal(30,2) not null,
ageAppropriate int not null,
constraint testCode_PK PRIMARY KEY (testCode),
constraint age_CHK check (ageAppropriate >= 0),
);
ALTER TABLE LabTest
ADD CONSTRAINT Category_CHK
CHECK (CASE Category
WHEN Price BETWEEN 7 AND 20 THEN 1
WHEN Price BETWEEN 20 AND 50 THEN 2
WHEN Price BETWEEN 50 AND 100 THEN 3
WHEN Price BETWEEN 100 AND 350 THEN 4
ELSE 0
END);
您需要将约束表述为列值等于 CASE
表达式:
ALTER TABLE LabTest
ADD CONSTRAINT Category_CHK CHECK
(
Category = CASE WHEN Price BETWEEN 7 AND 20 THEN 1
WHEN Price BETWEEN 20 AND 50 THEN 2
WHEN Price BETWEEN 50 AND 100 THEN 3
WHEN Price BETWEEN 100 AND 350 THEN 4
ELSE 0 END
);
旁注:CASE
表达式中的范围实际上是重叠的,因为 BETWEEN
两端都包含在内。因此,您所写的内容将与此相同:
CASE WHEN Price >= 7 AND Price <= 20 THEN 1
WHEN Price > 20 AND Price <= 50 THEN 2
WHEN Price > 50 AND Price <= 100 THEN 3
WHEN Price > 100 AND Price <= 350 THEN 4
ELSE 0 END
如果以上不是你想要的处理边界条件的方式,那么根据你的需要更改逻辑。