1. ホーム
  2. sql

[解決済み] WITH CHECK ADD CONSTRAINTの後にCHECK CONSTRAINT対ADD CONSTRAINTを行う。

2022-04-27 13:47:22

質問

SQL Server 2008のAdventureWorksサンプルデータベースを見ているのですが、その作成スクリプトを見ると、以下のような傾向があるようです。

ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD 
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
  REFERENCES [Production].[Product] ([ProductID])
GO

の後に、すぐに:

ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT     
[FK_ProductCostHistory_Product_ProductID]
GO

私は、外部キー(ここのように)、ユニーク制約、および通常の CHECK の制約があります。 DEFAULT 制約は、私がより慣れ親しんでいる通常のフォーマットを使用します。

ALTER TABLE [Production].[ProductCostHistory] ADD  CONSTRAINT  
[DF_ProductCostHistory_ModifiedDate]  DEFAULT (getdate()) FOR [ModifiedDate]
GO

最初の方法と2番目の方法の違いがあるとすれば、それは何でしょうか?

どのように解決するのですか?

最初の構文は冗長です。 WITH CHECK は新しい制約のデフォルトであり、制約もデフォルトでオンになっています。

この構文はSQLスクリプトを生成する際にSQL管理スタジオによって生成されます。おそらく、テーブルのデフォルトの制約動作が変更された場合でも制約が有効になるように、ある種の冗長性があると推測されます。