2013-03-05 48 views
0

我想,才能在SQL Express中創建一個表2008 R2,像這樣創建一個腳本:如何擺脫T-SQL中的孤立默認約束?

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

所以,等待。你的意思是你放棄了桌子,但不知何故約束沒有下降?,這不應該發生,我多次運行你的腳本,沒有任何問題。你使用的是什麼版本的SQL Server?你確定你沒有另一個具有名爲'DF_Table_col'約束的**表嗎? – Lamak 2013-03-05 15:00:54

+1

默認名稱在模式級別必須是唯一的。幾乎肯定有一些* other *對象具有該名稱,而不是您放棄的表的默認值。 – 2013-03-05 15:19:03

回答

1

爲DF_Table_col將被刪除,如果'表'被刪除,它屬於'表'可能有'DF_Table_col'。在另一張桌子上。

如果你不關心的名稱,你可以使用

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