我有一個表格,我需要確保startDate
不遲於endDate
。確保endDate等於或晚於startDate
每個日期都可以更新,因此無論是否輸入/修改了startDate
或endDate
(或兩者),規則必須適用。
使用觸發器,存儲過程還是其他的更好?任何示例語法表示讚賞。
我有一個表格,我需要確保startDate
不遲於endDate
。確保endDate等於或晚於startDate
每個日期都可以更新,因此無論是否輸入/修改了startDate
或endDate
(或兩者),規則必須適用。
使用觸發器,存儲過程還是其他的更好?任何示例語法表示讚賞。
使用檢查約束。比觸發器簡單得多。
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」。
該聲明已被終止。
完美, 謝謝。 – user2205507 2015-06-27 00:58:36
如果這是.net,php,coldfusion的一部分,無論使用哪種應用程序,都可以使用應用程序代碼來防止嘗試更新。 – 2013-04-23 21:55:59
@DanBracuk但如果用戶在應用程序之外運行臨時更新會怎麼樣?數據完整性邏輯應儘可能接近數據 - 如果您想在其他地方添加冗餘邏輯以更早捕獲數據,那麼數據完整性邏輯將會更好,但距離數據越遠,效率越低...... – 2013-04-23 22:26:49