web-dev-qa-db-ja.com

列のデータ型を日付時刻から浮動小数点に変更する

float列を持つテーブルがあります。すべてのレコードのこの列のすべての値はNULLです。データ型をdatetimeに変更します。

私はクエリを実行しました:

ALTER TABLE MyTable ALTER Column MyColumn DATETIME NULL

できます。しかし、データタイプをfloatに設定して変更を元に戻そうとすると:

ALTER TABLE MyTable ALTER Column MyColumn FLOAT NULL

私は例外を受け取ります:

データ型datetimeからfloatへの暗黙的な変換は許可されていません。このクエリを実行するには、CONVERT関数を使用します。

列MyColumnはすべてのレコードでnullであることに注意してください。

5
Anirudha

列にデータがない場合は、それをドロップして再度追加するだけです。

alter table MyTable drop column MyColumn;

go

alter table MyTable add MyColumn float;

列にデータがあり、値をfloat値に変換するのが理にかなっている場合は、列の名前を変更し、新しい列を追加して、convertを使用してデータを移動し、古い列を削除できます。

exec sp_rename 'MyTable.MyColumn', 'Temp_MyColumn', 'COLUMN';

go

alter table MyTable add MyColumn float;

go

update MyTable 
set MyColumn = convert(float, Temp_MyColumn) 
where Temp_MyColumn is not null;

go

alter table MyTable drop column Temp_MyColumn;
8
Mikael Eriksson