質問

私は、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...)

あなたは、単にチェックが失敗した場合のいずれかの方法は、操作がロールバックされ、特にそのテーブルのトリガであなたの検証を適用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top