希望你有一个美好的一天。我想做这样的事情。
CREATE TABLE Certificat
(
num_certificat SMALLINT NOT NULL,
description TEXT NOT NULL,
Date_depot DATE NOT NULL CHECK(Date_depot <= GETDATE()),
Date_validation DATE NOT NULL CHECK(Date_validation > Date_depot),
num_auteur SMALLINT NOT NULL,
num_innovation SMALLINT NOT NULL,
CONSTRAINT pk_numc PRIMARY KEY(num_certificat),
CONSTRAINT fk_au FOREIGN KEY(num_auteur) REFERENCES Auteur(num_auteur) ON
DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_inn FOREIGN KEY(num_innovation) REFERENCES
Innovation(num_innovation) ON DELETE CASCADE ON UPDATE CASCADE,
);
但我得到这个错误:
消息8141,级别16,状态0,行4列'Date_validation'的列CHECK约束引用另一列,表'Certificat'。消息1750,级别16,状态0,行4无法创建约束或索引。查看以前的错误。
那么如何将另一列引用到CHECK子句中呢?我希望表格拒绝Date_depot
大于Date_validation
的条目。
您需要在表级创建它 - 而不是在列旁边内联。
CREATE TABLE Certificat
(
num_certificat SMALLINT NOT NULL,
description TEXT NOT NULL,
Date_depot DATE NOT NULL CHECK(Date_depot <= GETDATE()),
Date_validation DATE NOT NULL,
num_auteur SMALLINT NOT NULL,
num_innovation SMALLINT NOT NULL,
CHECK(Date_validation > Date_depot), /*<----- Moved here*/
CONSTRAINT pk_numc PRIMARY KEY(num_certificat),
CONSTRAINT fk_au FOREIGN KEY(num_auteur) REFERENCES Auteur(num_auteur) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_inn FOREIGN KEY(num_innovation) REFERENCES Innovation(num_innovation) ON DELETE CASCADE ON UPDATE CASCADE,
);
您还应该考虑给它一个明确的名称。例如
CONSTRAINT ck_validation_after_depot CHECK(Date_validation > Date_depot)