外部キーの存在を確認し、存在しない場合は作成してデータベースを更新するスクリプトがあります。これは、SQLManagementStudioによって生成されました。
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblChangeRequestForecast_tblCostingCenter]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblChangeRequestForecast]'))
ALTER TABLE [dbo].[tblChangeRequestForecast] WITH CHECK ADD CONSTRAINT [FK_tblChangeRequestForecast_tblCostingCenter] FOREIGN KEY([CostingCenterID])
REFERENCES [dbo].[tblCostingCenter] ([CostingCenterID])
GO
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblChangeRequestForecast_tblCostingCenter]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblChangeRequestForecast]'))
ALTER TABLE [dbo].[tblChangeRequestForecast] CHECK CONSTRAINT [FK_tblChangeRequestForecast_tblCostingCenter]
GO
スクリプトを実行すると、エラーが発生します。
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_tblChangeRequestForecast_tblCostingCenter". The conflict occurred in database "mydatabase", table "dbo.tblCostingCenter", column 'CostingCenterID'.
これはとても不思議です。クエリが知る限り、外部キーの痕跡はありませんが、作成スクリプトは上記のエラーで失敗します。サーバーはSQLServer2005 SP3(9.00.4035.00)を実行しています。
[更新]:SQLServer2012インスタンスで問題を再現しました。したがって、バージョンはそれほど重要ではないようです。
これを引き起こす可能性のあるアイデアはありますか?