如何在SQL Server中删除列默认值?

时间:2013-12-03 11:22:48

标签: sql sql-server-2008

我使用SQL Server 2008 R2,并且我在几个数据库上有一堆日期时间属性。这是一个如何创建它们的例子。

ALTER TABLE TripEvent ADD CompleteTime DATETIME DEFAULT '1899-12-31' ;

因此该列允许空值,但默认值为“1899-12-31”。 我想从DBscript更改它,因此默认值为NULL。 我找到了blog。好的,所以默认值存储在约束中。 我的问题是,我怎样才能得到要删除的约束的名称?

3 个答案:

答案 0 :(得分:0)

只需删除约束即可使默认值为null - 例如没有默认值。

您应该能够通过运行此查询来找到约束(假设dbo架构,包含在where子句中以防万一):

SELECT default_constraints.name
FROM   sys.all_columns
       INNER JOIN sys.tables
               ON all_columns.object_id = tables.object_id
       INNER JOIN sys.schemas
               ON tables.schema_id = schemas.schema_id
       INNER JOIN sys.default_constraints
               ON all_columns.default_object_id = default_constraints.object_id
WHERE  schemas.name = 'dbo'
       AND tables.name = 'TripEvent'
       AND all_columns.name = 'CompleteTime'

然后你应该能够做到:

ALTER TABLE TripEvent
DROP CONSTRAINT <constraint name found above>

答案 1 :(得分:0)

试试这个..

 SELECT def.name AS NameofConstraint,def.type_desc,col.name AS ColName FROM 
  sys.default_constraints def
  INNER JOIN sys.all_columns col ON def.parent_object_id=OBJECT_ID('TripEvent')
  AND col.name='CompleteTime' AND
  col.default_object_id = def.OBJECT_ID 

答案 2 :(得分:0)

您也可以尝试此查询以获取默认约束。

select * from sysobjects o 
inner join syscolumns c
on o.id = c.cdefault
inner join sysobjects t
on c.id = t.id
where o.xtype = 'D'
and c.name = 'Column_Name'
and t.name = 'Table_Name'