我的数据库中有许多列最初是创建的,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
,因为我不能删除约束中引用的列。
这真的那么难吗?