2012-04-02 9 views
20

はIスクリプト場合は、外部キーを持つテーブルには、それは次のようになります。ALTER TABLE [dboは] [MyTableという] CHECK制約が[FK_MyTable_SomeCol]

は( ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol])のための第二部は何である
GO 
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_SomeCol] FOREIGN KEY([SomeCol]) 
REFERENCES [dbo].[MyOtherTable] ([SomeCol]) 
GO 
ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_SomeCol] 
GO 

+0

外部キー(SQL Server 2008 R2)を使用してテーブルをスクリプトすると、2番目のステートメントが表示されません。最初のものに 'WITH CHECK'ではなく' WITH NOCHECK' **が含まれていないことを確かめますか? –

+0

うん、それはノッチです。今、その機能は私には明らかです。皆さん、ありがとうございました! – yonexbat

答えて

19

これらのオプションを指定する必要はありませんが(新しい制約のデフォルトであるため)、同じジェネレータでも全く同じ方法でNOCHECKオプションが生成されます。 ALTER TABLEため

DocumentationCHECK/NOCHECK 2つの異なる使用を示す:

WITH CHECK | WITH NOCHECK

は、テーブル内のデータであるか、または新たに追加された、または再度イネーブルFOREIGN KEY又はCHECKに対して検証されていないかどうかを指定制約。指定しない場合は、新しい制約ではWITH CHECK、再有効化制約ではWITH NOCHECKとみなされます。

そして:

{ CHECK | NOCHECK } CONSTRAINT

はCONSTRAINT_NAMEを有効にするか無効にすることを指定します。

「テーブルの現在の内容を確認する」とは、「新しいデータが追加されると検証する」ということです。

関連する問題