使列值小于或等于当前日期

时间:2013-04-25 20:11:24

标签: sql sql-server database triggers

我需要确保我的某个列的输入可以调用它CreationDate is =<当前日期。

尝试使用此

失败后
CHECK ( CreationDate =< GETDATE())

由于这篇文章中提到的原因: CHECK constraint on date of birth?

我想知道如何编写一个SQL Server触发器来检查我尝试插入/更新的日期是否为&lt; 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;

你们能帮我一点吗?

1 个答案:

答案 0 :(得分:1)

文档说任何表达式,其计算结果为TRUE或FALSE:

  

CHECK约束通过限制值来强制域完整性   被一列或多列接受。您可以创建CHECK约束   使用任何返回TRUE或FALSE的逻辑(布尔)表达式   关于逻辑运算符。

对于非确定性函数没有限制(据我所知)(即,在同一调用可能在不同时间返回不同值的函数上)。

您指向的示例标记为Oracle。它还提供了一种替代解决方案,即添加默认值为getdate()的列,并对其进行检查。

因此,您的check约束应该有效。