次のように、SQL Express 2008 R2 でテーブルを作成するためにスクリプトを作成しようとしています。
IF (EXISTS (SELECT * FROM sys.tables WHERE name='Table' AND [type]='U')) BEGIN
DROP TABLE Table
END
GO
CREATE TABLE Table (
col DATETIMEOFFSET CONSTRAINT DF_Table_col DEFAULT GETUTCDATE()
)
GO
プロジェクトのこのリリース サイクルで再実行できるスクリプトを作成する方法を実践しようとしています。しかし、問題は、テーブル「テーブル」を削除する前に、デフォルトの制約 DF_Table_col を削除するのを忘れたことです。これは次のように記述します。
IF (EXISTS (SELECT * FROM sys.default_constraints WHERE name='DF_Table_col')) BEGIN
ALTER TABLE Table DROP CONSTRAINT DF_Table_col
END
GO
スクリプトを再実行しようとすると、次のエラーが表示されます。
Msg 2714, Level 16, State 5, Line 1
There is already an object named 'DF_Table_col' in the database.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
孤立した制約 DF_Table_col を取り除くにはどうすればよいですか?
次のように、この孤児を同じ名前で新しいテーブルにバインドしようとしました。
exec sp_bindefault 'DF_Table_col', 'Table.col'
しかし、それは私に次のエラーを与えます:
Msg 15050, Level 11, State 1, Procedure sp_bindefault, Line 108
Cannot bind default 'DF_Table_col'. The default must be created using the CREATE DEFAULT statement.