2013-04-23 46 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

相關問題