SQL Server 2008を使用しています
同じテーブルの複数の列でCHECK CONSTRAINTを使用して、データ入力の検証を試みます。
エラーが表示されます:
列 'AAAA'の列CHECK制約は、別の列、テーブル 'XXXX'を参照しています。
CHECK CONSTRAINTはこの方法では機能しません。
FKを使用せずにこれを単一のテーブルに実装する他の方法はありますか?
ありがとう
ここに私のコードの例
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
はい、CHECK CONSTRAINTをtableレベルで定義します
CREATE TABLE foo (
bar int NOT NULL,
fred varchar(50) NOT NULL,
CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
インラインでcolumn制約として宣言しています
...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...
編集する、説明するより投稿するのが簡単。コンマを修正しました。
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL, --need comma
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);
もちろん、問題はFK制約であるはずのCHECK制約を使用していますか?
チェック制約は、単一の列またはレコード全体を参照できます。
次の構文をレコードレベルの制約に使用します。
ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
特に、チェックが失敗した場合に操作がロールバックされるように、テーブルのトリガーに検証を適用するだけです。