2013-04-23 86 views
1

我有一个表格,我需要确保startDate不迟于endDate确保endDate等于或晚于startDate

每个日期都可以更新,因此无论是否输入/修改了startDateendDate(或两者),规则必须适用。

使用触发器,存储过程还是其他的更好?任何示例语法表示赞赏。

+0

如果这是.net,php,coldfusion的一部分,无论使用哪种应用程序,都可以使用应用程序代码来防止尝试更新。 – 2013-04-23 21:55:59

+0

@DanBracuk但如果用户在应用程序之外运行临时更新会怎么样?数据完整性逻辑应尽可能接近数据 - 如果您想在其他地方添加冗余逻辑以更早捕获数据,那么数据完整性逻辑将会更好,但距离数据越远,效率越低...... – 2013-04-23 22:26:49

回答

5

使用检查约束。比触发器简单得多。

CREATE TABLE dbo.foo 
(
    StartDate DATE NOT NULL, 
    EndDate DATE NOT NULL, 
    CONSTRAINT CheckEndLaterThanStart CHECK (EndDate >= StartDate) 
); 

如果该表已经存在:

ALTER TABLE dbo.foo 
    ADD CONSTRAINT CheckEndLaterThanStart 
    CHECK (EndDate >= StartDate); 

如果你尝试晚于结束日期插入一个开始日期,你会得到:

消息547,级别16 ,状态0,行1
INSERT语句与CHECK约束“CheckEndLaterThanStart”冲突。数据库“AdventureWorks2012”发生冲突,表“dbo.foo”。
该声明已被终止。

+0

完美, 谢谢。 – user2205507 2015-06-27 00:58:36

相关问题