2011-07-30 24 views
6

我有一個表,我想刪除或設置其中一列的默認值。我使用下面的腳本:幫助解決drop column默認值的表錯誤

ALTER TABLE AccAccountGroup ALTER COLUMN Name DROP DEFAULT 

ALTER TABLE AccAccountGroup ALTER COLUMN Name SET DEFAULT 'default value' 
當我運行該腳本,下面的錯誤

出現:

Incorrect syntax near the keyword 'DEFAULT'. =>爲下降腳本

Incorrect syntax near the keyword 'SET'. =>用於添加腳本

這些腳本是從msdn

什麼問題?我使用SQL Server 2008 R2。

回答

6

我相信您的參考是針對SQL Server Compact Edition的。改爲使用this one

您需要使用CONSTRAINT語法,並且需要使用默認的名稱。即使你沒有分配一個名字(並且我建議你將來做這個練習),SQL Server會分配一個名字,你可以使用EXEC sp_help AccAccountGroup來找到它。

嘗試這些語法:

ALTER TABLE AccAccountGroup 
DROP CONSTRAINT <default name> 

ALTER TABLE AccAccountGroup 
ADD CONSTRAINT DF_AccAccountGroup_name DEFAULT 'default value' FOR name 
+0

是不是語法「ALTER TABLE AccAccountGroup DROP CONSTRAINT <默認名稱>「 – jose

+0

不知道如何得到錯過了這麼久,但它糾正,現在測試的感謝? –

5

您提供的鏈接僅指SQL Server Compact Edition,不是「完整的」SQL Server。上述語句僅在SQL Server Compact Edition中有效。

在'完整'SQL Server中,列的默認值是使用約束來實現的。您可以添加默認約束使用的東西像表

ALTER TABLE AccAccountGroup ADD CONSTRAINT AccAcctGrp_Name_Def DEFAULT 'default value' FOR name; 

,並使用

ALTER TABLE AccAccountGroup DROP CONSTRAINT AccAcctGrp_Name_Def; 

請注意,你需要當你刪除它提供了約束的名稱將其刪除。如果您不知道約束的名稱,則以下查詢將查找它。如果/根據需要更改模式名dbo,也是表和列名,:

SELECT object_name(default_object_id) 
    FROM sys.columns 
WHERE object_id = object_id('dbo.AccAccountGroup') 
    AND name = 'Name'; 

一旦你得到了約束的名稱,你可以將其刪除。 (致謝:該查詢取自發表評論here。)