我有一个名为MyYear的列,其类型为datetime。它只存储了年份,因此我想将其更改为smallint。
当我尝试运行时:
ALTER TABLE MyTable
ALTER COLUMN MyYear smallint
我收到此错误:
从数据类型datetime到smallint的隐式转换不是 允许。使用CONVERT函数运行此查询。
当我运行时:
UPDATE MyTable
set MyYear=YEAR(MyYear)
它做了一些时髦的事情,并将所有年份设定为1905年。
我正在使用SQL Server。
答案 0 :(得分:4)
您无法将DATETIME转换为SMALLINT,您需要:
ALTER TABLE MyTable
ADD MyActualYear SMALLINT
GO
UPDATE MyTable SET MyActualYear = CAST(YEAR(MyYear) AS SMALLINT)
GO
ALTER TABLE MyTable
DROP COLUMN MyYear
GO
EXEC sp_RENAME 'MyTable.[MyActualYear]' , 'MyYear', 'COLUMN'
GO
即。添加一个新的临时列,使用您需要的值更新它,删除旧列,然后使用原始名称重命名临时列。
如果您在此列上有索引,您可能需要记住这可能产生的任何影响。