私のデータベースには、最初は として作成された列がいくつ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
...制約で参照されている列を削除できないため、何がわかっている場合にのみ、そのスクリプトを作成できます。
これってそんなに大変ですか?