【问题标题】:SQL Server alter field nameSQL Server 更改字段名称
【发布时间】:2010-12-03 13:07:37
【问题描述】:

使用 SQL Server 2005 将数据库字段从 datetime 更改为 integer 时遇到问题

我的代码是...

alter table overtime alter column adate numeric(5)

在使用此查询时遇到这样的错误

不允许隐式转换 数据类型日期时间到数据类型 数字,表格 ‘DaiichiPayroll.dbo.Overtime’,专栏 '一个约会'。使用 CONVERT 函数 运行此查询。

有什么解决办法吗?

【问题讨论】:

  • 您无法将 DATETIME 转换为 NUMERIC - 无法“就地”执行此操作 - 您需要使用 Sachin 在他的回答中建议的技术。

标签: sql-server field alter


【解决方案1】:

服务器无法将您的 dateTime 列隐式转换为数字。解决方案之一是 -

  1. 新建一个数值类型的列
  2. 通过编写附加查询将数据从 dateTime 列转换为数字列,然后
  3. 删除日期时间列
  4. 将新添加的列重命名为与删除的 dateTime 列相同的名称。

【讨论】:

  • k,但我有超过 20000 个值,那么这怎么可能
  • @Lawrance - 添加了将 dateTime 转换为 Numeric 的链接。
  • 我不想转换值,我需要将现有字段(例如(joindate datime))修改为(joidate numeric)
  • @Lawrance - 是的,但是由于您的列中已经有数据,mysql 无法隐式转换它。因此,我给出了我的解决方案。我不确定其他可用的方式。如果这可能像您想要的那样,可能其他人可能会提供帮助。
  • @Martin - 这个问题最初是针对 MySql 提出的,此后一直在进行编辑。我现在已经删除了 mysql 文档链接。谢谢。
【解决方案2】:

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

因此,如果有一些明确的 convert 语法可以运行,例如,将 8 字节 datetime 列更改为 8 字节 bigint 列,但 AFAIK 不存在,那就太好了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多