2016-06-23 33 views
0

我想添加以下約束到我的數據庫中名爲service的表。如何在SQL Server中添加檢查約束?

約束1: 既不DateCompletedDueDate也不可以先StartDate

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

另一個約束條件應該添加到名爲client的表中。

約束條件2:Post_Code值應該是三位或四位數的正整數。

CREATE TABLE [Client] (
    Client_ID  INT   NOT NULL PRIMARY KEY 
, First_Name  VARCHAR(15) NOT NULL 
, Last_Name  VARCHAR(15) NOT NULL 
, Street_Address VARCHAR(50) 
, Suburb   VARCHAR(15) NOT NULL 
, State   VARCHAR(3) NOT NULL 
, Post_Code  INT   NOT NULL 
, Phone_number INT   NOT NULL 
); 

回答

2

服務:

ALTER TABLE [Service] 
ADD CONSTRAINT [service_datecheck] 
CHECK ([StartDate] <= [DateCompleted] AND [StartDate] <= [DueDate]); 

客戶:

ALTER TABLE [Client] 
ADD CONSTRAINT [client_postcodecheck] 
CHECK ([Post_Code] > 0 AND LEN([Post_Code]) IN (3,4)); 
+0

可能會失敗負。 > = 100 <= 9999可能會更好 – Paparazzi

+0

@Paparazzi我確實考慮過這樣做,它可能會更好,但我選擇完全匹配問題中的內容。 –

+0

完美適合我的要求。希望你也能解決這個問題。請檢查http://stackoverflow.com/questions/38011099/how-to-create-an-sqlserver-functions?noredirect=1#comment63464878_38011099 – Ayyub