将列数据类型从日期时间更改为浮点数

Ani*_*dha 5 sql-server datatypes ddl

我有一个带float列的表。此列中所有记录的所有值都是NULL。我想将数据类型更改为datetime.

我执行了查询:

ALTER TABLE MyTable ALTER Column MyColumn DATETIME NULL
Run Code Online (Sandbox Code Playgroud)

有用。但是当我尝试通过将数据类型设置为来恢复更改时float

ALTER TABLE MyTable ALTER Column MyColumn FLOAT NULL
Run Code Online (Sandbox Code Playgroud)

我得到了例外:

不允许从数据类型 datetime 隐式转换为 float。使用 CONVERT 函数运行此查询。

请注意,所有记录的 MyColumn 列都为空。

Mik*_*son 8

如果列中没有数据,您可以将其删除并再次添加。

alter table MyTable drop column MyColumn;

go

alter table MyTable add MyColumn float;
Run Code Online (Sandbox Code Playgroud)

如果您的列中有数据并且将值转换为浮点值是有意义的,您可以重命名列、添加新列、移动数据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;
Run Code Online (Sandbox Code Playgroud)