我正在尝试删除位列上的默认值,我已将其设置错误,我想再次正确地执行此操作。但是,当我写:
ALTER TABLE Person
ALTER COLUMN tsHomePref DROP DEFAULT;
我得到'关键字默认错误附近的'语法不正确',我不知道为什么
我想删除列然后再次构建
ALTER TABLE Person
ADD COLUMN tsHomePref bit NOT NULL DEFAULT 0;
那么,为什么不让我“放弃”默认值?
谢谢R。
答案 0 :(得分:4)
你需要做
ALTER TABLE Person
DROP CONSTRAINT DF__Person__tsHomePr__05BA7BDB
如果您对这些使用一致的命名约定,那么您将不必查看系统表以获取名称。
答案 1 :(得分:3)
如果您不知道约束的名称(正如我今天在搜索同一问题的解决方案时所不知道的那样),您可以将以下内容用于Ms Sqlserver:
DECLARE @defname VARCHAR(100), @cmd VARCHAR(1000)
SET @defname =
(SELECT name FROM sysobjects so
JOIN sysconstraints sc ON so.id = sc.constid
WHERE object_name(so.parent_obj) = 'TableName'
AND sc.colid =
(SELECT colid FROM syscolumns WHERE id = object_id('dbo.TableName') AND name = 'FieldName'))
SET @cmd = 'ALTER TABLE TableName DROP CONSTRAINT ' + @defname
EXEC(@cmd)
GO
这适用于我的情况。希望它也有助于其他人。