2017-02-07 26 views
0
create table STAFF 
(StaffID TINYINT IDENTITY NOT NULL, 
fName varchar(20) NOT NULL, 
lname varchar(20) NOT NULL, 
Phone  varchar(10) NOT NULL, 
Gender  char(01), 
DoB   date NOT NULL, 
Mentor  TINYINT, 
Payment_ID TINYINT NOT NULL, 
constraint staff_pk primary key (StaffID), 
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID), 
constraint mentor_fk foreign key (Mentor) references staff(StaffID) 

ジェンダーの列には、「M」、「F」、「O」の文字のみを挿入します。 は、どのように私は、 "WITH CHECK OPTIONが""WITH CHECK OPTION"のテーブルを作成したい

+0

@GurVチェック制約のオプション:https://msdn.microsoft.com/en-us/library/ms190273.aspx – SqlZim

+0

@SqlZim - これは明らかにOPの意図ではありません。ロールバックしてください。 –

+0

@SqlZim - too much :-) –

答えて

1

私はあなたがほしいと思うと思わないwith check option。 (あなたが同様にcreate table声明でこれを置くことができます。)

alter table staff 
    add constraint chk_staff_gender check (gender in ('M', 'F', 'O')); 

with check optionは内のデータが基礎となる場合でも、データの一貫性のままであることを保証しますビューのオプションです:あなたはcheck制約をしたいですテーブルの変更(hereを参照)。

1

がオプションがデフォルトでオンになってチェックして, constraint gender_chk check (Gender in ('M','F','O'))

を追加するこれを行うことができます。 MSDN Documentation for ALTER TABLE(強調追加)から

create table STAFF 
(StaffID TINYINT IDENTITY NOT NULL, 
fName varchar(20) NOT NULL, 
lname varchar(20) NOT NULL, 
Phone  varchar(10) NOT NULL, 
Gender  char(01), 
DoB   date NOT NULL, 
Mentor  TINYINT, 
Payment_ID TINYINT NOT NULL, 
constraint staff_pk primary key (StaffID) 
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID), 
constraint mentor_fk foreign key (Mentor) references staff(StaffID) 
, constraint gender_chk check (Gender in ('M','F','O')) 
) 

:CHECK WITH

| WITH NOCHECK
テーブル内のデータが、新しく追加または再有効化されたFOREIGN KEY制約またはCHECK制約に対して有効かどうかを指定します。指定されていない場合は、の場合はWITH CHECKとみなされ、再有効化された制約の場合はWITH NOCHECKとみなされます。

既存のデータに対する新しいCHECKまたはFOREIGN KEY制約を確認しない場合は、WITH NOCHECKを使用します。これを行うことはお勧めできませんが、ごくまれにあります。新しい制約は、後のすべてのデータ更新で評価されます。制約が追加されたときにWITH NOCHECKによって抑制される制約違反は、制約に従わないデータで行を更新すると、将来の更新が失敗する可能性があります。

クエリオプティマイザはWITH NOCHECKで定義された制約を考慮しません。このような制約は、ALTER TABLE表WITH CHECK CHECK CONSTRAINT ALLを使用して再度有効にするまで無視されます。

1

あなたが「CHECK OPTIONを」check constraint

create table STAFF 
(StaffID TINYINT IDENTITY NOT NULL, 
fName varchar(20) NOT NULL, 
lname varchar(20) NOT NULL, 
Phone  varchar(10) NOT NULL, 
Gender  char(01) NOT NULL, 
DoB   date NOT NULL, 
Mentor  TINYINT, 
Payment_ID TINYINT NOT NULL, 
constraint staff_pk primary key (StaffID), 
constraint staff_fk foreign key (Payment_ID) references PAYMENT(Payment_ID), 
constraint mentor_fk foreign key (Mentor) references staff(StaffID), 
constraint Gender_ck check (Gender in ('M','F','O')) 
) 

に参照のうえさにすることはできませんビューを介して、レコードを挿入/更新する一切の試みview definition
のためのオプションの句であり、ビューによって選択されると、エラーが発生します。

+0

'with check'と' with nocheck'はチェック制約のオプションです。 https://msdn.microsoft.com/en-us/library/ms190273.aspx – SqlZim

+0

@SqlZim - 「WITH CHECK OPTION」とは異なり、OPによって使用された正確な用語 –

関連する問題