测试目的:验证利用链接服务器、分布式查询获取EXCEL中的数据
测试环境
Microsoft SQL Server 2005 - 9.00.3080.00 (X64)  
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

基础知识及相关准备
1、基于OLE DB访问的相关基础知识
2、创建链接服务器:sp_addlinkedserver
3、Openrowset

基于OLE DB访问的相关基础知识,参看下图
 
本次测试相关接口为:Microsoft OLE DB Provider for Jet
针对Excel不同版本请参考下表使用不同的OLE DB接口参数
Office Version Provider Provider_String
Office 97 ~2005 Microsoft.Jet.OLEDB.4.0 Excel 5.0
Office 2007 Microsoft.ACE.OLEDB.12.0 Excel 12.0[需安装组件或打ServicePack 1.0]

创建链接服务器

  1. DECLARE @RC int
  2. DECLARE @server nvarchar(128)
  3. DECLARE @srvproduct nvarchar(128)
  4. DECLARE @provider nvarchar(128)
  5. DECLARE @datasrc nvarchar(4000)
  6. DECLARE @location nvarchar(4000)
  7. DECLARE @provstr nvarchar(4000)
  8. DECLARE @catalog nvarchar(128)
  9. SET @server = 'XLTEST_SP'
  10. SET @srvproduct = 'Excel'
  11. SET @datasrc = 'c:\book1.xls'
  12. --注意因excel的版本不同,选择不同的接口参数
  13. SET @provider = 'Microsoft.Jet.OLEDB.4.0'
  14. SET @provstr = 'Excel 8.0'
  15. EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider,
  16. @datasrc, @location, @provstr, @catalog
  17. --获取链接服务器对应sheet1范围内的数据
  18. SELECT * FROM [Excel]...[Sheet1$]
  19. --针对Microsoft.ACE.OLEDB.12.0,还需告知SQL Server如果处理
  20. USE [master]
  21. GO
  22. EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'AllowInProcess',1
  23. GO
  24. EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'DynamicParameters',1
  25. GO
  26. OpenRowSet
  27. EXEC sp_configure 'show advanced options', 1
  28. GO
  29. RECONFIGURE
  30. GO
  31. EXEC sp_configure 'Ad Hoc Distributed Queries', 1
  32. GO
  33. RECONFIGURE
  34. GO
  35. select  * into NewTable
  36. FROM OPENROWSET (
  37. 'Microsoft.ACE.OLEDB.12.0' ,
  38. 'Excel 12.0;Database=c:\book1.xlsx;HDR=YES' ,
  39. 'SELECT * FROM [sheet1$]' )
  40. END

经测试可获得对应excel工作表中的数据。

测试中的问题点及部分解决办法:
1、对应office97~2005创建链接服务器时,无对应的OLE DB 接口组件。
【解决方法】:
  安装office2005内版本即可获取到Microsoft.Jet.OLEDB.4.0接口组件。安装在数据源中可能无法获取到对应安装的文件。 还请在运行中使用regsvr32 msjetoledb40.dll 对其进行模块注册即可。

【问题】:
  Microsoft.Jet.OLEDB.4.0 至sp8后无更新的版本,且对应64位没有对应的更新。(据坛子里的朋友说有过64位的补丁,据现有查证没有找到)
建议:因Microsoft.Jet.OLEDB.4.0不再进行更新支持,对应于Office相关链接组件还请根据最新的office版本进行下载更新。

2、SQL Server 2005中对应Office2007类型文件,无对应OLE DB接口组件。
【解决办法】:安装2007 Office system 驱动程序:数据连接组件即可。

下载地址:点击打开链接

3、对应于查找范围的一个小BUG 
[Sheet1$]类似于此的查找范围,如果首字符为非英文字符时,分布式查询及链接服务器引用方式均无法显示的获得对应范围的数据。
不知是我的配置问题导致,还是都有的BUG还请查证。

4、针对提示RPC的问题
【解决办法】:

  1. USE master;
  2. EXEC sp_serveroption '服务器名称', 'rpc', 'true';  --启用RPC

5、OLE DB 提供程序 'SQLOLEDB' 指出该对象中没有任何列

【解决方法】:

set fmtonly off  设置即可。

参考文档:

1、如何将数据从 Excel 导入到 SQL Server

2、How to use Excel with SQL Server linked servers and distributed queries

3、PRB:当运行使用 OLE DB Provider for Microsoft Jet 的链接服务器查询时,出现错误 7399

4、关于 Jet 4.0 Service Pack 8 的信息

5、2007 Office system 驱动程序:数据连接组件

(转)链接服务器——获取EXCEL数据的更多相关文章

  1. 怎么利用Aspose.Cells 获取excel 数据表中sheet的名称

    说明:开发环境 vs2012 asp.net mvc4 c# 利用Aspose.Cells 获取Excel数据表的sheet的名称,并把获取的名称赋值给easyUI 的combobox 1.运行效果 ...

  2. android 从服务器获取新闻数据并显示在客户端

    新闻客户端案例 第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示, 为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直 ...

  3. SQLServer通过链接服务器远程删除数据性能问题解决

    原文:SQLServer通过链接服务器远程删除数据性能问题解决 在上一遍文章中介绍了SQLServer通过链接服务器访问Oracle性能问题的解决方法,本文介绍链接服务器下远程删除SQLServer数 ...

  4. python获取Excel数据

    Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...

  5. python 获取excel数据 自动登陆

    import xlrdimport timeimport unittestfrom selenium import webdriver class u8819(unittest.TestCase): ...

  6. Python用pandas获取Excel数据

    import pandas as pd df1 = pd.DataFrame(pd.read_excel(r'C:\python测试文件\我的三国啊.xlsx',sheet_name='Sheet1' ...

  7. 获取Excel数据(或部分数据)并导出成txt文本格式

    运行代码前先导入jxl架包,以下代码仅供参考: 测试excel文件(我要获取该excel的内容为省.县.乡.村.组和PH的值): ExcelTest01类代码如下: // 读取Excel的类 impo ...

  8. 浏览器中上传Excel文件,服务器获取Excel字段。写入的数据库中。操作Excel的方式jxl和poi。

    从Excel中获取字段,官方给我们提供了方法,地址https://poi.apache.org/components/spreadsheet/quick-guide.html#CellContents ...

  9. poi 获取excel数据 导入数据库

    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map<String, ...

随机推荐

  1. python之旅:并发编程之多进程理论部分

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...

  2. poj 2774 后缀数组 两个字符串的最长公共子串

    Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 31904   Accepted: 12 ...

  3. redis 新开端口号

    2012 ps aux | grep redis 2013 cd /usr/local/redis/ 2014 ls 2015 cd etc/ 2016 ls 2017 cp redis.conf r ...

  4. Ansible11:变量详解

    目录 简单说明 一.在Inventory中定义变量 二.在Playbook中定义变量 1.通过vars关键字定义 2.通过vars_files关键字引入变量文件 3.通过vars_prompt来实现人 ...

  5. vue2.0实战记录

    1. 初始化项目vue init webpack caseone cd caseonecnpm installcnpm install less less-loader -Dcnpm install ...

  6. day10 浅谈面向对象编程

    面向对象编程:第一步找名词,名词是问题域中的. 第二步概括名词设计成类.某些名词可以浓缩包含到其它名词中,成为其属性. 第三步找动词,动词也是问题域中的.   第四步概括动词设计成方法.动作的产生往往 ...

  7. 对硬盘进行分区时,GPT和MBR有什么区别?

    在Windows 8或8.1中设置新磁盘时,系统会询问你是想要使用MBR还是GPT分区.GPT是一种新的标准,并在逐渐取代MBR. GPT带来了很多新特性,但MBR仍然拥有最好的兼容性.GPT并不是W ...

  8. python3.6.4的importlib模块重载用法

    了解:模块的重载 考虑到性能的原因,每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块, 有的同学可能会想到直 ...

  9. javascript精雕细琢(四):认亲大戏——通过console.log彻底搞清this

    目录 引言 代码在前 1.function下的this 2.箭头函数下的this 结语 引言        JS中的this指向一直是个老生常谈,但是新手又容易晕的地方.我在网上浏览了很多帖子,但是发 ...

  10. 动态规划:树形DP-景点中心(树的带权重心)

    话说宁波市的中小学生在镇海中学参加计算机程序设计比赛,比赛之余,他们在镇海中学的各个景点参观.镇海中学共有n个景点,每个景点均有若干学生正在参 观.这n个景点以自然数1至n编号,每两个景点的编号均不同 ...