确保endDate等于或晚于startDate

1 sql sql-server triggers stored-procedures sql-server-2008

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

无论日期可以更新,所以规则都不管申请是否startDate或者endDate(或两者)被输入/修改.

使用触发器,存储过程还是其他什么更好?任何样本语法都表示赞赏.

Aar*_*and 5

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

CREATE TABLE dbo.foo
(
  StartDate DATE NOT NULL,
  EndDate   DATE NOT NULL,
  CONSTRAINT CheckEndLaterThanStart CHECK (EndDate >= StartDate)
);
Run Code Online (Sandbox Code Playgroud)

如果表已存在:

ALTER TABLE dbo.foo
  ADD CONSTRAINT CheckEndLaterThanStart
  CHECK (EndDate >= StartDate);
Run Code Online (Sandbox Code Playgroud)

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

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