1

我有一张桌子,我需要确保它startDate不迟于endDate.

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

使用触发器、存储过程或其他东西更好吗?任何示例语法表示赞赏。

4

1 回答 1

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”中。
该语句已终止。

于 2013-04-23T21:32:15.603 回答