22,209
社区成员
发帖
与我相关
我的任务
分享
/*==================================================================
1.很难从显示的错来知道:openrowset,opendatasource这两个函数哪儿出错了。
2.必须保证函数中的参数正确,否则会有莫名其妙的错误。
3.由于导入的Excel文件格式只能是.xls,所以在导入数据时,
可以先把要导入的扩展名为.xlsx的文件另存为扩展名.xls的文件,
然后把原始.xlsx数据,在格式不变的情况下复制到新的.xls。
4.在导入数据时,必须要按照目标表的字段类型、长度,来转化excel中的数据,
比如,那么在导入时把float转化成numeric,然后再转成varchar,
要是直接从float转成varchar,会把有些数转化成用科学计数法显示的数字,
再进一步转化是会报错。
5.导入到远程的目标表时,目标表必须已经存在
========================================================================*/
--3.Excel
--3.1.1链接服务器excel,不用建立服务器登录名
EXEC sp_addlinkedserver
@server = 'EXCEL',
@srvproduct = 'Jet 4.0',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@datasrc = 'c:\t.xls',
--@location = NULL,
@provstr = 'Excel 5.0;' --不加分号也可以
--3.1.2通过链接服务器查询
SELECT *
FROM [EXCEL]...[sheet1$]
--3.1.3引用12.0库
EXEC sp_addlinkedserver
@server = 'EXCEL',
@srvproduct = 'Jet 12.0',
@provider = 'microsoft.ace.oledb.12.0',
@datasrc = 'c:\t.xls',
--@location = NULL,
@provstr = 'Excel 12.0;' --不加分号也可以
SELECT *
FROM [EXCEL]...[sheet1$] - -查询语句完全一样
--3.2.1用openrowset函数,引用4.0的库
select *
from
openrowset('microsoft.jet.oledb.4.0',
'Excel 5.0;database=c:\t2.xls', --文件必须存在
sheet1$) --表必须存在
select *
from
openrowset('microsoft.jet.oledb.4.0',
'Excel 5.0;database=c:\t2.xls',
'select * from [sheet1$]')
/*=========================================================================
如果在要导入数据的目标机器上装有office2007及其以上版本,
那么可以用以下的方法导入扩展名为.xlsx,引用了库:microsoft.ACE.oledb.12.0,
excel的版本为:12.0
注意:不能在openrowset中写任何的空格等多余的字符,
否则会报错,而且错误没有针对性
===========================================================================*/
--3.2.2用openrowset函数,引用4.0的库
select *
from openrowset('microsoft.ace.oledb.12.0',
'Excel 12.0;database=c:\test.xlsx',
'select * from [sheet1$]')
--3.3.1用opendatasrouce,引用4.0的库
select *
from
opendatasource('microsoft.jet.oledb.4.0',
'data source=c:\t.xls;Extended Properties=Excel 5.0')...[sheet1$]
--3.3.2用opendatasrouce,引用12.0的库
select *
from
opendatasource('microsoft.ace.oledb.12.0',
'data source=c:\t.xls;Extended Properties=Excel 12.0')...[sheet1$]