我使用SQL Server 2008 R2,并且我在几个数据库上有一堆日期时间属性。这是一个如何创建它们的例子。
ALTER TABLE TripEvent ADD CompleteTime DATETIME DEFAULT '1899-12-31' ;
因此该列允许空值,但默认值为“1899-12-31”。 我想从DBscript更改它,因此默认值为NULL。 我找到了blog。好的,所以默认值存储在约束中。 我的问题是,我怎样才能得到要删除的约束的名称?
答案 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'