1

startDateが より遅くないことを確認する必要があるテーブルがありますendDate

どちらの日付も更新できるため、入力/変更のstartDate有無endDate(またはその両方) に関係なくルールを適用する必要があります。

トリガー、ストアド プロシージャ、または何か他のものを使用する方が良いですか? サンプル構文は大歓迎です。

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 に答える