1

外部キー制約を持つ一連のテーブルを含む Visual Studio データベース プロジェクトがあります。

パブリッシュ スクリプトには、制約の追加スクリプトが含まれています。

ALTER TABLE [dbo].[AttributeValue] WITH NOCHECK
ADD CONSTRAINT [FK_AttributeValue_Attribute] 
FOREIGN KEY ([AttributeId]) REFERENCES [dbo].[Attribute] ([AttributeId]);

そして、スクリプトの最後で、制約を有効にしました:

ALTER TABLE [dbo].[AttributeValue] WITH CHECK CHECK CONSTRAINT [FK_AttributeValue_Attribute];

問題は、制約が存在しないと考えているため、制約を有効にできないことです。テーブルを確認すると、存在しないことを確認できます。

制約が作成されていないのはなぜですか?

スクリプトを単独で実行すると、作成が機能し、有効化が機能します。

4

1 に答える 1

1

これは本当に毎日のWTFのエントリになります。

誰かがビルド後のスクリプトをプロジェクトに追加しました。このスクリプトは次の手順を実行します。

  1. システムテーブルを検査して、すべての制約を削除します

  2. いくつかのデータを追加します

  3. システムテーブルを調べて、制約を再度作成しようとします

もちろん、ステップ3は、ステップ1ですべてを削除したことを考えると、システムテーブルに何も見つからないため、何もしません。

私はこの計画に本当に驚いており、それを次のものに置き換えます。

ステップ1

EXEC sp_MSforeachtable @command1="print 'Disabling constraints: ?'", @command2="ALTER TABLE ? NOCHECK CONSTRAINT all"

ステップ3

EXEC sp_MSforeachtable @command1="print 'Enabling constraints: ?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
于 2012-11-13T10:02:49.120 に答える