複数の列にチェック制約
-
26-09-2019 - |
質問
私は、SQL Server 2008の
を使用します私は検証データ入力しようとする同じテーブルに複数の列にCHECK制約を使用します。
私は、エラーを受け取ります:
列の列CHECK制約を 「AAAA」の参照別の列、 テーブル 'XXXX' ます。
CHECK制約は、このようにしていない作業を行います。
FKを使用せずに、単一のテーブルの上にこれを実装する他の方法?
おかげ
ここに私のコードの例
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
解決
はい、テーブルのレベルでチェック制約を定義する
CREATE TABLE foo (
bar int NOT NULL,
fred varchar(50) NOT NULL,
CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
あなたはの列としてインラインでそれを宣言しているの制約
...
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...)
あなたは、単にチェックが失敗した場合のいずれかの方法は、操作がロールバックされ、特にそのテーブルのトリガであなたの検証を適用することができます。
所属していません StackOverflow