2016-06-23 8 views
0

私は「状態」欄の内容/サンプルデータは以下から1になるコラム「ステータス」データベースにチェック制約を追加する方法?

CREATE TABLE Service(
Service_ID INT(5) PRIMARY KEY NOT NULL, 
Invoice_ID INT(5), 
Project_ID INT(5) NOT NULL, 
Description CHAR(20) NOT NULL, 
Start_Date VARCHAR (10) NOT NULL, 
Due_Date VARCHAR (10) NOT NULL, 
Planned_Price VARCHAR (10), 
Actual_Price VARCHAR (10), 
Status CHAR (10) NOT NULL, 
Date_Completed VARCHAR (10) 
); 

に、「サービス」という名前のテーブルに次のチェック制約を追加します。アクティブまたは完了した場合、アクティブな計画
は、*

を完了:DueDate、開始日とPlannedPriceはすべてのNULLではありません
*完了した場合:DateCompletedとActualPriceがnullの両方ではありません

答えて

0

私はそれをテストしていない、
は、しかし、これは最初の1

ALTER TABLE Service WITH NOCHECK 
ADD CONSTRAINT CK_serice_one 
CHECK (
    (Status IN ('active','completed') 
      AND DueDate IS NOT NULL 
      AND StartDate IS NOT NULL 
      AND PlannedPrice IS NOT NULL) 
    OR Status NOT IN ('active','completed') 
); 
です

、これはそれが本当に助けた二

ALTER TABLE Service WITH NOCHECK 
ADD CONSTRAINT CK_serice_two 
CHECK (
    (Status LIKE 'completed' 
      AND DateCompleted IS NOT NULL 
      AND ActualPrice IS NOT NULL) 
    OR Status NOT LIKE 'completed' 
); 
+0

ありがとう、です。私はこれらの両方の制約を独立したalter table staementsで実行するのですか、それとも1つのalter table文でそれらを実行する必要がありますか? – Ayyub

+0

独立しているようですが、 –

0

これは

Status CHAR(10) NOT NULL CHECK (Status IN ('planned', 'active', 'completed')) 

(Status like 'active' and DueDate NOT NULL AND StartDate not NULL) 
を支援します
関連する問題