27

SQLServer2008を使用しています

同じテーブルの複数の列でCHECKCONSTRAINTを使用して、データ入力を検証しようとしています。

エラーが発生しました:

列'AAAA'の列CHECK制約は、別の列、テーブル'XXXX'を参照します。

CHECKCONSTRAINTはこのようには機能しません。

FKを使用せずにこれを単一のテーブルに実装する他の方法はありますか?

ありがとう

これが私のコードの例です

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
4

3 に答える 3

53

はい、テーブルレベルでチェック制約を定義します

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制約を使用しているのかという疑問が残ります...?

于 2010-08-09T07:30:24.273 に答える
2

チェック制約は、単一の列またはレコード全体を参照できます。

レコードレベルの制約には、次の構文を使用します。

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
于 2010-08-09T07:33:08.410 に答える
1

テーブルのトリガーに検証を適用するだけで、特にチェックが失敗した場合に操作がロールバックされます。

于 2010-08-09T12:51:18.793 に答える