Excel导入Sql Server时间格式总是变成NULL,手动导入时就有这个问题,请问应该如何处理

红叶骑士 2007-10-25 09:21:12
我手动导入时有这个问题,在Excel中格式是时间的,数据“2007年”就可以成功导入,“2007年7月”就无法导入,导入后变成空值。
刚才查了一下帖子,说要处理Excel中的格式,我格式无论是改成任何样子的时间格式还是改成纯文本,都不能导入啊,把SQL Server中的相应字段格式无论改成datetime还是smalldatetime还是varchar也都不可。
请问各位大侠,应该怎么处理。
请问怎么解决这个手动导入的问题啊!
...全文
1551 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
红叶骑士 2007-11-25
  • 打赏
  • 举报
回复
真的没有好办法吗?
目前手动是可以处理这个事情,但是自动我还不知道怎么做啊。
到了强行结帖德时间了,祝福大家,凡是给出建议的都有分,谢谢大家。
tcxx2008 2007-11-23
  • 打赏
  • 举报
回复
关注,没更好的方法了?
红叶骑士 2007-10-25
  • 打赏
  • 举报
回复
Lero061,你的方法是可行的
除了麻烦没有别的缺点。
DTS手动导入前要处理数据。
不过对于我的问题是可以解决,因为我这个数据就是手动导入的。
如果自动的时候该怎么办啊。
比如说每天传来一张这样的Excel表,然后要自动DTS到SQL中。一定要写个别的程序处理一下Excel吗?
LERO061 2007-10-25
  • 打赏
  • 举报
回复
当初我也遇见这个问题了,而且是一部分可以导入,一部分不可以,具体的解决方案如下:
(1)将导入时不能显示的数据在EXCEL中剪切出来,重新作为一张EXCEL表,然后将原表中剩下的数据导入已经建立好的Table中。
(2)在数据库中重新建立一张表,这张表中,开始不能导入的数据字段选择和第一张创建的表不一样而且符合EXCEL表中数据格式的数据类型,然后导入刚才剪切出来的数据,一般会成功。
(3)利用SQL语句将第二张表的数据插入到第一张表中,而最开始不能导入的字段此时要用CAST数据类型转换,以将第二张表的数据转换为和第一张表一致的数据类型。

最后,我查找了以下原因,造成这种情况的主要原因有三点:
(1)EXCEL 表中的字段数据类型和定义表中的字段数据类型不符
(2)数据长度不够
(3)数据表中同一列的数据具有不同的数据类型
internetroot 2007-10-25
  • 打赏
  • 举报
回复
我也遇到过一个问题,就是将时间2007-12-12 12:12:12.012到入Execl后就变成了2007-12-12,后面的12:12:12.012不会显示出来,但是后面的12:12:12.012并没有被截掉,如果把鼠标定位到该单元框,在Excel的菜单栏下面的公用输入框里却可以看到全部的2007-12-12 12:12:12.012,这是什么原因类?
wzjcntlqs 2007-10-25
  • 打赏
  • 举报
回复
2003年在EXCEL中文本格式为常规,2003年3月 EXCEL中文本格式为自定义中的yyyy"年"m"月",这样导入后的结果为
2003年 3/1/2003

红叶骑士 2007-10-25
  • 打赏
  • 举报
回复
另外发现一个问题,
如果在Excel中排在前面的行如果是“2007年7月”,后面的是2007年
那么在导入后就会出现“2007年7月”被导入为2007-7-1,而“2007年”为空值
红叶骑士 2007-10-25
  • 打赏
  • 举报
回复
楼上的,确实有这种现象,我用的是SQL 2000。
另外gingerkang 说得对,如果前面加上“'”单引号时确实可以解决这个问题。
但是要手动一个一个加才行,只在第一行或者是前上百行加上后没有用处。
哪一行不加哪一行就显示不出来,
怎么解决啊!
chuifengde 2007-10-25
  • 打赏
  • 举报
回复
没有你说的现象,我导入正常
以下是excel2003中的数据:
2007年 2007年7月
2006年 2006年6月
2003年 2003年3月


sql中建表,a varchar(50),b varchar(50)
导入结果

2006年 6/1/2006
2003年 3/1/2003
gingerkang 2007-10-25
  • 打赏
  • 举报
回复
加了那个也没有多大用,我也遇到过这个问题
始终很郁闷,需要改注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"
这个值表示决定取多少行的数据来确定该列的数据是数字还是字符,字符行多就是字符,数字多就是数字
我后来改成1,在把第一行数据前面全部加',好像就没有出现问题了
很郁闷
playwarcraft 2007-10-25
  • 打赏
  • 举报
回复
1. 將數字和日期欄位選中,用資料剖析的方式,改為文字型。
2. 在附件屬性里,加入imex=1
dawugui 2007-10-25
  • 打赏
  • 举报
回复
改成纯文本,都不能导入啊?

绝对不可能.
playwarcraft 2007-10-25
  • 打赏
  • 举报
回复
加入imex=1附加屬性
gingerkang 2007-10-25
  • 打赏
  • 举报
回复
在excel中把纯数字的数据前面加'
再导入肯定不会有这个问题
红叶骑士 2007-10-25
  • 打赏
  • 举报
回复
楼上的,也改过,但是还是不行,导入后就是空值
dawugui 2007-10-25
  • 打赏
  • 举报
回复
在excel中把'2007年7月'改为'2007-07-01'
LERO061 2007-10-25
  • 打赏
  • 举报
回复
其实如果想彻底解决这个问题,也不是没有办法,但是这个办法的前提就是传表的一方配合修改。你所要导入的数据应该不是来自同一个数据库的同一个表吧,你可以建议传表方将数据来源表的数据结构修改为一致,这样的话再导入的时候应该不会再有什么问题。至于在自己方做到一劳永逸的修改,我也没有什么好办法,看看楼下的各位吧!
playwarcraft 2007-10-25
  • 打赏
  • 举报
回复
--建立job就可以。
--欄位一一對應.
insert into T(xx,ss,xx...)
select * from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source=''d:\test.xls'';User ID=Admin;Password=;Extended properties=''Excel 5.0;imex=1''')...[sheet1$]

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧