2010-12-03 58 views
1

我有问题,使用SQL Server 2005SQL Server的ALTER字段名

我的代码...

alter table overtime alter column adate numeric(5) 

在使用该查询我得到的错误,以改变从datetime数据库字段integer与价值观像从 数据类型的日期时间数据类型 数字,表此

不允许隐式转换 'DaiichiPayroll.dbo.Overtime',列 'adate'。使用CONVERT功能 运行此查询。

任何解决方案?

+1

您无法将`DATETIME`转换为`NUMERIC` - 没有办法“适当地”执行此操作 - 您需要使用Sachin在其答案中建议的技巧。 – 2010-12-03 14:40:05

回答

6

服务器无法将您的dateTime列隐式转换为数字。其中一个解决办法是 -

  1. 创建数字型
  2. 的新列通过编写额外的查询从datetime列的数据转换为数字列,然后
  3. 删除DateTime列
  4. 重命名新添加的列与删除的dateTime列相同。
+0

K,但我有更多然后20​​000值,那么它是如何可能的 – 2010-12-03 13:13:03

2

虽然Sachin的答案可能是最好的解决方案,但您应该知道该表仍将继续使用已删除列until you rebuild the clustered index的存储空间。

出于这个原因,如果有可能被运行,例如,8字节datetime栏更改为8字节bigint列,但据我所知没有存在一些明确convert语法,这将是相当不错的。

另一种方法是使用SSMS为您生成脚本。这将生成重建整个表的脚本。如果你有一个大桌子或者很多NCI,那么这个阻塞开销很可能是不可接受的。