检查约束引用同一表中的另一列

4 sql-server constraint ddl check-constraints

我有这个表,但检查约束给我一个错误:

列 'MedicamentRegulated' 的列 CHECK 约束引用另一列,表 'Medicaments'。

我已经看到这在 SQL Server 中是允许的,但我不知道为什么它不起作用:/

CREATE TABLE Medicaments (
MedicamentID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(50),
DateValidity DATE,
MedicamentRegulated BIT CHECK((MedicamentRegulated = 1 AND DateValidity IS NOT NULL) 
  OR MedicamentRegulated = 0)
)
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 7

您正在使用的语法是列级约束,因此它只能适用于列它连接到...尝试在表级别而不是命名您的约束(这也可以鼓励你给你的约束,而不是一个有意义的名字可怕的系统默认值):

CREATE TABLE dbo.Medicaments -- always use schema*
(
  MedicamentID INT IDENTITY(1,1) NOT NULL,
  Name VARCHAR(50),
  DateValidity DATE,
  MedicamentRegulated BIT,
  CONSTRAINT pk_Med PRIMARY KEY (MedicamentID),
  CONSTRAINT ck_Med_reg CHECK
  (
    (MedicamentRegulated = 1 AND DateValidity IS NOT NULL) 
    OR MedicamentRegulated = 0
  )
);
Run Code Online (Sandbox Code Playgroud)

*见这篇文章