sql server drop默认语法错误

时间:2010-06-28 23:30:34

标签: sql-server-2005 constraints

我正在尝试删除位列上的默认值,我已将其设置错误,我想再次正确地执行此操作。但是,当我写:

ALTER TABLE Person
ALTER COLUMN tsHomePref DROP DEFAULT;

我得到'关键字默认错误附近的'语法不正确',我不知道为什么

我想删除列然后再次构建

ALTER TABLE Person
ADD COLUMN tsHomePref bit NOT NULL DEFAULT 0;

那么,为什么不让我“放弃”默认值?

谢谢R。

2 个答案:

答案 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 

这适用于我的情况。希望它也有助于其他人。