我有一个表,我想删除或设置其中一列的默认值.我用下面的脚本:
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.
我相信您的参考是针对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)
您提供的链接仅指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)
一旦获得约束的名称,就可以删除它.(致谢:此查询来自此处发布的评论.)
| 归档时间: |
|
| 查看次数: |
6979 次 |
| 最近记录: |