帮助解决表列错误的drop column默认值

时间:2011-07-30 11:41:10

标签: sql sql-server

我有一个表,我想删除或设置其中一列的默认值。我使用下面的脚本:

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。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

您提供的链接仅指SQL Server精简版,而不是完整的&#39; SQL Server。以上语句仅在SQL Server Compact Edition中有效。

在&#39; full&#39; 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。)