【发布时间】:2009-12-14 20:49:07
【问题描述】:
我的数据库中有许多列最初创建为smalldatetime,并且确实需要为datetime。其中许多列是使用 DDL 创建的:
[columnname] smalldatetime not null default getdate()
...这意味着为了更改列的类型,我首先必须删除默认值,然后在更改后重新创建默认值。
当然,我没有在 DDL 中指定默认名称,因此所有列都有默认名称,例如 DF__CaseLock__CaseCo__182C9B23。当我的应用程序创建它的数据库时,它是通过执行一个脚本来实现的,所以我客户数据库中的默认名称(我猜;我还没有验证过)与我的名称不同。
即使我知道默认约束的名称,我也无法弄清楚在删除它后将其添加回的语法。事实上,我不清楚是否可能向现有列添加默认约束。
看来我要做的是这样的:
declare @t table (id int not null primary key, date smalldatetime null)
insert into @t (id, date)
select id, date_column from my_table
drop constraint constraint_name
alter table my_table drop column date_column;
alter table my_table add date_column datetime default getdate()
update my_table set date_column = t.date FROM my_table m JOIN @t t ON m.id = t.ID
...只有当我知道 constraint_name 是什么时,我才能编写该脚本,因为我无法删除约束中引用的列。
真的有那么难吗?
【问题讨论】:
标签: sql-server constraints default alter