制約ではできないと思う方法でテーブルの整合性を強制しようとしています...
CREATE TABLE myData
(
id INTEGER IDENTITY(1,1) NOT NULL,
fk_item_id INTEGER NOT NULL,
valid_from DATETIME NOT NULL,
invlaid_from DATETIME NOT NULL
)
私が適用したい制約は、日付が重複する同じ「fk_item_id」のエントリがあってはならないということです。
ノート:
invalid_from は、有効期間の直後の瞬間です。
これは、次の 2 つの期間が問題ないことを意味します...
- '2008 Jan 01 00:00' -> '2008 Feb 01 00:00' (1 月全体)
- '2008 Feb 01 00:00' -> '2008 Mar 01 00:00' (2月全体)
トリガーでそのルールを確認できます。ただし、トリガーが不正な挿入/更新を検出した場合、「不正な」挿入/更新が発生しないようにする最善の方法は何ですか?
(挿入されたレコードが 2 つの有効なレコードと 2 つの無効なレコードを含む場合、2 つの無効なレコードだけを停止できますか?)
乾杯、
民主党。
編集:
上記の場合、関数を使用した制約がうまく機能しました。しかし、トリガー バージョンで RAISERROR が機能しなかった理由がわかりませんでした。
トリガーがAFTERトリガーであり、BEFOREトリガーが必要なためだと思いましたが、それはオプションではないようです...