2010-06-28 59 views
3

我想删除一个位列的默认值,我已经设置它错了,我想再次正确地做。然而,当我写:SQL服务器拖放默认语法错误

ALTER TABLE Person 
ALTER COLUMN tsHomePref DROP DEFAULT; 

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

我要删除的列,然后重新建立它

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

那么,它为什么不让我“降低”默认值?

感谢R.

+0

可能的重复[你如何在T-SQL中删除默认值或类似约束?](http://stackoverflow.com/questions/1123060/how-do-you-drop-a-default-value-或类似的约束在T - SQL) – 2013-11-01 10:55:05

回答

4

你需要做的

ALTER TABLE Person 
    DROP CONSTRAINT DF__Person__tsHomePr__05BA7BDB 

它帮助,如果你使用这些统一的命名规则,所以你不必看在系统表来获取名称第一。

+0

是的,这工作,我能够添加与我想要的默认值的列。谢谢。 – flavour404 2010-06-30 17:01:59

2

如果你不知道该约束的名称(如我今天不知道解决同样的问题进行搜索时也是如此),你可以使用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 

这工作在我的情况。希望它也能帮助别人。