如何在T-SQL中摆脱孤立的默认约束?

时间:2013-03-05 14:54:28

标签: sql sql-server tsql constraints

我正在尝试创建一个脚本,以便在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

我正在尝试按照创建脚本的做法,该脚本可以在我的项目的此发布周期中重新执行。 但问题是我忘记在删除表“Table”之前删除默认约束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.

1 个答案:

答案 0 :(得分:1)

如果删除'Table'并且它属于'Table',则DF_Table_col将被删除,可能有'DF_Table_col'。在另一张桌子上。

如果您不关心可以使用的名称

CREATE TABLE Table (
    col DATETIMEOFFSET  DEFAULT GETUTCDATE()
)
GO