数据仓库之抽取数据:通过链接服务器获取Excel中的数据

 

在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区中的数据进行转换,最后把经过处理的干净的数据加载到数据仓库中。

 

目标数据库是sql server,现在要从Excel文件中抽取数据。

但在实际操作中,需要注意以下几点:

(1)很难从显示的错来知道:openrowset,opendatasource这两个函数哪儿出错了。
(2)必须保证函数中的参数正确,否则会有莫名其妙的错误。

(3)由于导入的Excel文件格式只能是.xls,所以在导入数据时,
 可以先把要导入的扩展名为.xlsx的文件另存为扩展名.xls的文件,
 然后把原始.xlsx数据,在格式不变的情况下复制到新的.xls。
 
(4)在导入数据时,必须要按照目标表的字段类型、长度,来转化excel中的数据,
 比如,那么在导入时把float转化成numeric,然后再转成varchar,
 要是直接从float转成varchar,会把有些数转化成用科学计数法显示的数字,
 再进一步转化是会报错。
 
(5)导入到远程的目标表时,目标表必须已经存在  。

(6)如果在要导入数据的目标机器上装有office2007及其以上版本,
那么可以用以下的方法导入扩展名为.xlsx,引用了库:microsoft.ACE.oledb.12.0,
excel的版本为:12.0

注意:不能在openrowset中写任何的空格等多余的字符,否则会报错,而且错误没有针对性

 

1、开启即席查询

--修改高级参数
sp_configure 'show advanced options',1
go
--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go
--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

2、链接服务器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、通过链接服务器查询

SELECT *
FROM [EXCEL]...[sheet1$]

4、引用microsoft.ace.oledb.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$]   -    -查询语句完全一样

5、用openrowset函数,引用4.0、12.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$]')


select *
from openrowset('microsoft.ace.oledb.12.0',
                'Excel 12.0;database=c:\test.xlsx',
                'select * from [sheet1$]')

6、用opendatasrouce,引用4.0、12.0的库

select *
from 
opendatasource('microsoft.jet.oledb.4.0',
               'data source=c:\t.xls;Extended Properties=Excel 5.0')...[sheet1$]


select *
from 
opendatasource('microsoft.ace.oledb.12.0',
               'data source=c:\t.xls;Extended Properties=Excel 12.0')...[sheet1$]
   

 

你可能感兴趣的:(【SQL,编程&商务智能BI】)