2013-04-25 52 views
0

我需要確保我的某個列的條目可以稱爲CreationDate is = <當前日期。使列值小於或等於當前日期

沒有試圖利用這個

CHECK (CreationDate =< GETDATE()) 

對於這篇文章提到的原因後:我想知道 CHECK constraint on date of birth?

我將如何編寫SQL Server中的觸發器,將檢查日期我嘗試插入/更新= <的currentdate

我從來沒有使用過的觸發器,我想出了這一點,但我不知道是否行得通,不然怎麼會被調用。 我試圖讓觸發器返回一個錯誤,以便程序員被迫檢查或修復這個問題。

CREATE TRIGGER CheckValidDateTrigger 
ON Reports 
INSTEAD OF 
UPDATE 
AS  
DECLARE @ReportCloseDate DateTime; 

    IF (@ReportCloseDate > GETDATE()) 
    BEGIN 
    RAISERROR ('Error, the date your trying to save cannot be higher or newer that the current date. The date must be in the past or be the current date', -- Message text. 
       16, -- Severity. 
       1 -- State. 
       ); 
    END; 

你們能幫我一下嗎?

+0

[此問題](http://stackoverflow.com/questions/15803002/date-cannot-be-in-the-future-sql)在最後一個答案中有一個類似的觸發器樣本。 – Alexander 2013-04-25 20:27:30

+2

您是否試過'CHECK(CreationDate 2013-04-25 20:28:07

+0

應該先測試一下,然後再問是否有效對不起 – Termiux 2013-04-25 20:40:00

回答

1

文檔說任何表達式,其值爲TRUE或FALSE:

CHECK約束通過限制 由一個或多個列接受的值執行域的完整性。您可以使用邏輯運算符上的任何邏輯(布爾)表達式創建CHECK約束 ,該表達式返回TRUE或FALSE,基於 。

對非確定性函數(就是說,對於同一個調用可能在不同時間返回不同值的函數)沒有限制(據我發現)。

您指向的示例標記爲Oracle。它還提供了一個替代解決方案,即添加一個默認值爲getdate()的列並檢查該列。

因此,您的check約束如預期應該工作。

+0

在詢問之前應該先測試一下,是的,它的工作很抱歉 – Termiux 2013-04-25 20:40:43

+0

@Gordon - 當你說「volatile」時,你實際上是指非確定性的。同樣,寫入的檢查約束也不起作用 - '= <'與<='不一樣。這些表格中只有一個是有效的。 – 2013-04-25 20:41:08

+0

@AaronBertrand指出,我確實解決了這個問題 – Termiux 2013-04-25 20:42:04

相關問題