如何消除T-SQL中孤立的默认约束?

如何消除T-SQL中孤立的默认约束?,sql,sql-server,tsql,constraints,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

我正在尝试创建一个脚本,以便在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
exec sp_bindefault 'DF_Table_col', 'Table.col'
我试图遵循创建一个脚本的实践,该脚本可以在我的项目的这个发布周期中重新执行。 但问题是,在删除表“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.
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.
如何摆脱表列的孤立约束?

我试图用相同的名称将此孤立项绑定回一个新表,如下所示:

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
exec sp_bindefault 'DF_Table_col', 'Table.col'
但它给了我以下错误:

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.
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.

如果“表”被删除并且它属于“表”,则DF_Table_col将被删除,可能存在“DF_Table_col”。在另一张桌子上

如果你不在乎你可以用的名字

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

等等。你的意思是你删除了表,但不知何故约束没有删除?这不应该发生,我多次运行了你的脚本,没有任何问题。您正在使用哪个版本的SQL Server?。是否确实没有另一个名为
DF\u table\u col
的约束表?默认名称在架构级别必须是唯一的。几乎可以肯定的是,还有其他一些具有该名称的对象,而不是您删除的表的默认值。