第一种方法

1.在数据库中建表

2.然后通过将excel中的数据拷贝到Uedit32里面,通过列块模式操作成insert into ... values ('',''...),成功完成,这种方法还算简便,但是对于没有Uedit32(或之类软件)的朋友来说,这个方法没有可行性。

第二种方法

(我目前采用的第二种方法,因为没有安装Uedit,'Microsoft.Jet.OLEDB.4.0也使用不了

将excel另存为.txt文件的格式,然后通过SQLServer自带的DTS工具导入,(DTS导入老是保错)

我使用的是SQL 导入:

bulk insert  _data0510
from 'D:\1235.txt'--文件路径'd:\kq\kq.txt'
with
(FIELDTERMINATOR = '\t',--字段间分隔符号,\t制表符
ROWTERMINATOR = '\n'--每条记录分隔符
)

应该还有种通过T-SQL语句的方法来导入的,语句如下,但是测试了一下还有问题,如下:


 在工作中,而且还是项目上线割接中碰到,结果电话号码数据全乱套了,后果很严重,幸好,在网上找到了这篇文章,有了解决的指望,希望下周一客户能允许我在生产库解决掉这个问题。

在Excel中,我们时常会碰到这样的字段(最常见的就是电话号码),即有纯数字的(如没有带区号的电话号码),又有数字和其它字符混合 (如“区号-电话号码”)的数据,在导入SQLServer过程中,会发现要么纯数字的数据导过去之后变成了NULL,要么就是数字和其它字符混合的数据导过去之后变成了NULL。

    为什么有些是纯数字的数据导过去之后变成了NULL,有些却是数字和其它字符混合的数据导过去之后变成了NULL,原来是在将Excel数据导入

SQLServer过程中,SQLServer会做出判断,是采用float型还是nvarchar型来接受数据,测试发现(没有科学依据),SQLServer采用哪一型取决于将要导入

的数据中本身具有哪一型的记录数比例多,如10笔数据,有4笔没有带区号的电话号码,6笔是带区号的电话号码,那么转到SQLServer就会选择

nvarchar型,结果就是4笔没有带区号的电话号码导过去之后全成了NULL,反之亦然。不管怎么样,我们最终都希望SQLServer是采用nvarchar来接受

数据,毕意我们要导入的数据中有数字和其它字符混合的数据,用float型来接受是不可能的,这样只要我们解决了将纯数字的数据转换成字符型并让

SQLServer接受就可以了。

    我首先想到的就是将这个字段的所有数据在Excel中设置为文本格式,刚才说了本来就是希望导入SQLServer时成为字符型,但结果令人失望,不起作用。

    最终网上搜索到了答案:混合数据类型列的强制解析——IMEX=1
使用 IMEX=1 选参之后,只要取样数据里是混合数据类型的列,一律强制解析为 nvarchar/ntext 文本。当然,IMEX=1 对单一数据类型列的解析是不影

响的。

SELECT * INTO Table08 
FROM OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="E:\1.xls";Extended properties="Excel 5.0;HDR=Yes;IMEX=1;"')...[Sheet1$]

    注:
    1.这条语句是在SQLServer查询分析器中执行,并且要选择好数据库,否则会把要导入的数据往别的数据库中导了。
    2.Table08是数据导入后在SQLServer中的表名,属于新建,所以请确认在导入数据前数据库中没有该表名,否则会提示已存在同一表名。
    3.Data Source,不要连在一起写,中间有一空格。
    4.E:\1.xls,为Excel所在的绝对路径和数据库名。
    5.Excel 5.0,根据不同的Excel版本写5.0或8.0或其它。
    6.IMEX=1,是转换成文本输入的意思,非常重要,如果没有,就跟你直接导入效果一样。
    7.Sheet1是表名,千万别看到语句中有$就在表名后加上$,因为$是语句要加的,别画蛇添足。


本文来自CSDN博客,转载请标明出处:http://www.cnblogs.com/zjiizj/archive/2010/01/26/1657101.html