确保endDate等于或晚于startDate

时间:2013-04-23 21:25:24

标签: sql sql-server sql-server-2008 stored-procedures triggers

我有一张表格,我需要确保startDate不迟于endDate

任何日期都可以更新,因此无论输入/修改startDateendDate(或两者),都必须应用规则。

使用触发器,存储过程还是其他什么更好?感谢任何示例语法。

1 个答案:

答案 0 :(得分: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);

如果您尝试在结束日期之后插入开始日期,您将获得:

  

Msg 547,Level 16,State 0,Line 1
  INSERT语句与CHECK约束“CheckEndLaterThanStart”冲突。冲突发生在数据库“AdventureWorks2012”,表“dbo.foo”中   声明已经终止。