在sql server

时间:2017-04-12 07:07:04

标签: c# sql sql-server types

我正在尝试将列数据类型从bigint更改为日期类型,直接显示错误:

  

"无法修改表格。从数据类型bigint显式转换   到目前为止是不允许的。"

即使我尝试使用alter query再次更改也会出现此错误

  

"操作数类型冲突:bigint与日期"不兼容。

请帮助..

我尝试了什么:

ALTER TABLE emp_det1 ALTER COLUMN dob date

2 个答案:

答案 0 :(得分:0)

它出错,因为您的bigint列中包含无法显式转换为日期时间的数据。下面的代码测试理论,并将失败。在没有数据插入的情况下再次尝试,它将起作用。建议创建新的日期时间列并在转换时传输数据的帖子评论是您的最佳选择...假设您的bigint值确实可以转换为日期时间。

create table #test (MyCol bigint)

insert into #test (MyCol) values(3123456789)

alter table #test 
alter column MyCol datetime

答案 1 :(得分:0)

由于错误消息表明您无法将bigint转换为日期。

你需要做一些逻辑来转换它:

例如2016年4月10日将存储为4102016,2016年12月10日将为12102016.存在性格差异。

我的建议是:

  • 备份数据,复制表格或进行备份。
  • 创建一个包含pk和dob的临时表。
  • 将varchar列添加到临时表,并使用dobs填充它。 (chardate)
  • 在原始表中将所有dobs设置为null。
  • 将列上的数据类型更改为日期。
  • 使用正确的逻辑从临时表中对原始表运行更新以转换日期。

根据你的日期格式,这个逻辑会有所不同,但对于美国(mm / dd / yyyy)看起来会是这样的:

{{1}}

您可以将转换更改为try_converts以查找不合格的日期,我还建议您在更新之前运行一些select语句,以确保在提交之前数据正确。