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

mas*_*ani 6 sql sql-server

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

ALTER TABLE AccAccountGroup ALTER COLUMN Name DROP DEFAULT

ALTER TABLE AccAccountGroup ALTER COLUMN Name SET DEFAULT 'default value'
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,出现以下错误:

Incorrect syntax near the keyword 'DEFAULT'. =>用于删除脚本

Incorrect syntax near the keyword 'SET'. =>用于添加脚本

这些脚本来自msdn.

问题是什么?我使用SQL Server 2008 R2.

Tom*_*m H 6

我相信您的参考是针对SQL Server Compact Edition的.请改用这个.

您需要使用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
Run Code Online (Sandbox Code Playgroud)


Luk*_*ard 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;
Run Code Online (Sandbox Code Playgroud)

并使用它

ALTER TABLE AccAccountGroup DROP CONSTRAINT AccAcctGrp_Name_Def;
Run Code Online (Sandbox Code Playgroud)

请注意,删除时需要提供约束的名称.如果您不知道约束的名称,则以下查询将查找它.dbo如果/必要,更改架构名称以及表名和列名:

SELECT object_name(default_object_id)
  FROM sys.columns
 WHERE object_id = object_id('dbo.AccAccountGroup')
   AND name = 'Name';
Run Code Online (Sandbox Code Playgroud)

一旦获得约束的名称,就可以删除它.(致谢:此查询来自此处发布的评论.)