2015-04-16 139 views
0

我有2分表中的列 -檢查約束SQL

[SendDate]和[PayDate]

我想實現一個約束,將檢查 - 產品無法支付,如果有沒有被送出去。

基本上在簡單的話IF SendDate爲NULL,則PayDate不能containt值或類似 東西,如果SendDate爲NULL,則如果一些用戶類型PayDate,錯誤將上升

我不知道如何去關於它。

大加讚賞任何建議,感謝

回答

2

使用Check約束這樣

CHECK([PayDate] IS NULL OR ([PayDate] IS NOT NULL AND [SendDate] IS NOT NULL)) 

樣品

CREATE TABLE dbo.Payment 
(
    [Id] INT IDENTITY(1,1) PRIMARY KEY, 
    [SendDate] DATE NULL, 
    [PayDate] DATE NULL, 
    CONSTRAINT CHK_PayDate CHECK([PayDate] IS NULL OR ([PayDate] IS NOT NULL AND [SendDate] IS NOT NULL)) 
) 

-- All Fine 
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(CURRENT_TIMESTAMP,CURRENT_TIMESTAMP); 
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(CURRENT_TIMESTAMP,NULL); 
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(NULL,NULL); 

--Raises Error 
INSERT INTO dbo.Payment([SendDate],[PayDate]) VALUES(NULL,CURRENT_TIMESTAMP); 
+0

不錯的一個,謝謝:) – Vlad11