代码之家  ›  专栏  ›  技术社区  ›  Yishai

如何从表中的列中删除默认值?

  •  38
  • Yishai  · 技术社区  · 16 年前

    如何更改列以删除默认值?

    该列是使用以下内容创建的:

     ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
    

     alter table sometable alter column somecolumn nchar(1) null
    

    6 回复  |  直到 16 年前
        1
  •  64
  •   Mason G. Zhwiti    7 年前

    ALTER TABLE {TableName} 
    DROP CONSTRAINT ConstraintName
    

    如果在创建约束时未指定名称,则SQL Server会为您创建一个名称。您可以使用SQLServerManagementStudio查找约束名称,方法是浏览表,打开其树节点,然后打开约束节点。

    编辑: Josh W.'s 答案包含一个指向 SO question

        2
  •  15
  •   JKennedy Ziyad Godil    10 年前

    这就是我想出来的(在看到Josh W.答案之前,实际上我看到了它,但浏览得太快了,我误解了它):

    declare @name nvarchar(100)
    select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable')
    
    if (@name is not null)
      begin
         exec ('alter table [sometable] drop constraint [' + @name +']')
      end
    

    我在这里的优势是,我知道整个表上只有一个这样的约束。如果有两个,那么我想这就是为什么你应该给他们命名;)。

    (问题是,这是对10个不同客户数据库的修改,因此在脚本中没有一个一致的名称)

        3
  •  14
  •   Mise Vardaan Sharma    8 年前

    如果您不知道约束的名称

    DECLARE @ConstraintName nvarchar(200)
    SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
    WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
    AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
                            WHERE NAME = N'__ColumnName__'
                            AND object_id = OBJECT_ID(N'__TableName__'))
    IF @ConstraintName IS NOT NULL
    EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)
    

    https://stackoverflow.com/a/13715343/2547164

        4
  •  6
  •   user247702    9 年前
    select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'
    

    找到你的约束并使用它 DROP CONSTRAINT 放下它。或者运行游标/while循环以删除数据库中所有类似的默认值。

        5
  •  0
  •   Mike Godin    8 年前

    如果有多个约束与该表关联,并且您不想将其全部删除,请右键单击该约束并选择“将Cnstraint脚本设置为->创建到->新建查询编辑器窗口”。这将显示创建约束的代码,包括列名和默认值。

    然后右键单击要删除的约束,然后选择“删除”。

        6
  •  0
  •   Tekin    6 年前

    我最终解决了这个问题,在SQLManagementStudio中右键单击表名并选择Design。然后我删除了列属性中的默认值。

        7
  •  -2
  •   Daniyal Awan    9 年前
    alter table <tablename> drop constraint <constraintname>
    

    如果您不知道约束的名称,可以使用sql server Management studio检查约束名称。。。。希望这有帮助。

    推荐文章