2

SSMSの[タスク]>[スクリプトの生成]で、いくつかのテーブルを選択し、生成されたSQLで次の情報を取得します。

ALTER TABLE [Project]  WITH CHECK ADD  CONSTRAINT [FK_Project_aspnet_Users] FOREIGN KEY([UserId])
REFERENCES [aspnet_Users] ([UserId])
GO
ALTER TABLE [Project] CHECK CONSTRAINT [FK_Project_aspnet_Users]
GO

最初のステートメントで指定されているのに、なぜCHECK2番目のステートメントでそれが行われるのですか?WITH CHECK2番目のステートメントは、最初のステートメントの直後に表示されます。

TIA

4

1 に答える 1

3

それが冗長であることを観察するのは正しいです。

これは、SSMS がスクリプトを生成する方法にすぎません。

スクリプトは生成後に変更される可能性があることに注意してください。最初のステートメントは ' ' を使用するように変更できWITH NO CHECK、2 番目のステートメントは冗長ではありません。

最初のステートメントの目的は、制約を追加することです。

2 番目のステートメントの目的は、制約を有効にすることです。

少なくとも、それは私がスクリプトを読む方法です。ステートメントを 1 つずつ手動で実行していた場合、「制約が既に存在します」という例外が発生する可能性がありますが、その制約は有効になっていない可能性があります。

既存の制約が確実に有効になるように、2 番目のステートメントを引き続き実行します。

于 2012-08-07T20:34:47.083 に答える