2017-12-16 3 views
1

あなたは良い一日を過ごしているといいですか? 私はこのようなことをしたい。SQL Server - CHECK節の別の列を参照する

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, 
); 

しかし、私はこのエラーを取得する:

Msg 8141, Level 16, State 0, Line 4 Column CHECK constraint for column 'Date_validation' references another column, table 'Certificat'. Msg 1750, Level 16, State 0, Line 4 Could not create constraint or index. See previous errors.

は、どのように私は、CHECK句に別の列を参照することができますか?私はテーブルがDate_depotより大きいDate_validationより大きいエントリを拒否したいと思います。

答えて

1

テーブルレベルで作成する必要があります。列の横にはインラインではありません。

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) 
+0

ありがとうございます。私は他のプログラミング言語に見られるような、なぜそれが何らかの種類の変数であるのだろうか? (C/C++ ...など)? –

+0

列の隣のインラインで宣言された制約は、その列のみを参照できるというTSQL文法の制限です。 –

関連する問題