当前位置: 代码迷 >> Sql Server >> sql2005导入excel或OpenDataSource查询时包含数字的文本列总想转为数字类型,怎么改为默认文本类型
  详细解决方案

sql2005导入excel或OpenDataSource查询时包含数字的文本列总想转为数字类型,怎么改为默认文本类型

热度:7   发布时间:2016-04-24 09:43:30.0
sql2005导入excel或OpenDataSource查询时包含数字的文本列总想转为数字类型,如何改为默认文本类型?
例如excel中有一列数据
xmbm2
110200005
111000002①
111000002
120100001①
120100002
120100003
用sql2005的导入导出工具创建新表,目标列是varchar(50),结果是带①的数据会为null
OpenDataSource查询时也是null,
变通的方法是把此列所有行前面加个字母,就正确了,或先导入access再导入sql2005
如何直接修改sql2005总想处理为数字类型的方式?

SELECT xmbm2,CAST(xmbm2 AS VARCHAR(20)) AS xmbm2b
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0', 
  'Data Source="d:\book3.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet2$] 


------解决思路----------------------
混合数据类型列的强制解析——IMEX=1

SELECT * INTO  temp1
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=D:\***.xls;Extended properties="Excel 5.0;HDR=Yes;IMEX=1', 'SELECT * FROM ***) ;
------解决思路----------------------
悲剧,确实是的,我以前遇到你说的情况,是设置了IMEX=1解决的,文本正常了,但是纯数值又变成科学计数法了,

那建议可行的话,到两遍,然后把数据合并一下
再不行的话,excel的那一列,加个特殊字符,按照文本来处理,导入数据库后再把这个文本给替换掉
------解决思路----------------------
试试在加上单引号‘在前面,通常这样就会变成字符了。
------解决思路----------------------
把excel的数据类型先改掉。
导入的时候在设置对应的列的类型。

以上要是不成功,就只能处理excel数据了,分开导~~
------解决思路----------------------
既然是导数据,Excel 的格式是不要的,所以先存成 csv,再导入,
用 formatfile 指定格式,参考这个帖子,虽然问题不一样。
------解决思路----------------------
这需要在EXCEL上处理,把EXCEL内容复制在记事本,把EXCEL所有栏位改主文本,再把记事本内容复制回EXCEL,再用语句查看一下是否解决
------解决思路----------------------
通常EXCEL默认类型造成的
------解决思路----------------------
这种建议进行2次类型转化,一次类型转化是不够的。

cast(cast(  xx  as nvarchar(30)) as numeric(30))

  相关解决方案