0

次のように、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.
4

1 に答える 1

1

「テーブル」が削除され、「テーブル」に属している場合、DF_Table_col が削除される限り、「DF_Table_col」が存在する可能性があります。別のテーブルで。

名前を気にしない場合は、使用できます

CREATE TABLE Table (
    col DATETIMEOFFSET  DEFAULT GETUTCDATE()
)
GO
于 2013-03-05T15:02:12.033 に答える