我有一个表,我想删除或设置其中一列的默认值。我使用下面的脚本:
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。
答案 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。)