2012-01-06 165 views
1

我需要更改現有表中列的默認值。 (我實際上在網上發現了幾個例子「確認」這個)我可以做 ALTER TABLE表ALTER COLUMN列SET DEFAULT'something'但我得到語法錯誤,並根據這個http://msdn.microsoft.com/en-us/library/ms190273.aspx DEFAULT是不支持。SQL Server - 更改列默認值

接下來的想法是從數據庫中刪除默認的約束,但是我發現,該表創建的約束並沒有被時間和SQL生成一個隨機的名字與每一個部署,以便我可以不上名字引用它。

我想出了從SYS表的查詢返回的約束的名稱:我要寫由字符串連接的查詢,我不能停止思考如何必有

select o.name from sys.objects o 
join sys.columns c on o.object_id = c.default_object_id 
join sys.tables t on c.object_id = t.object_id 
where t.name='TableName' and c.name='ColumnWithDefValue' 

做所有這些的更好方法。有什麼建議麼?

TL; DR版本:有什麼改變在SQL Server R2的列的默認約束的最簡單的方法?

感謝

+0

您複製的鏈接是SQL精簡版的鏈接,我使用的是完整的SQL。我收到的錯誤是SET的語法錯誤(或者如果我省略SET關鍵字,則爲DEFAULT) – 2012-01-06 16:08:33

+1

我也曾經碰到過這個問題(這就是爲什麼我總是命名我的約束)。我做了你正在做的事,取出系統生成的名字,構建動態代碼以刪除它,然後用標準化名稱重新創建它(我使用DF_TableName__ColumnName)。 – 2012-01-06 16:14:49

回答

1

看起來你必須刪除約束,然後重新創建它

http://bypsoft.blogspot.com/2007/10/changing-default-column-values-sql.html

+0

對,我已經看到了,但問題是我不知道約束的名稱,所以我不能很容易地刪除它。 – 2012-01-06 16:07:05

+0

SELECT * FROM sys.default_constraints WHERE parent_object_id = OBJECT_ID('TableName') – msmucker0527 2012-01-06 16:16:10

+0

@ msmucher0527:該查詢返回表上的所有默認約束我仍然需要限制它每列,但是,謝謝,這是我的查詢少一個連接... – 2012-01-06 16:20:05