结合链接服务器与分布式查询获取EXCEL中的数据测试
基于之前发的一个帖子http://topic.csdn.net/u/20100913/14/af852c48-7f6d-4c8c-82ae-2c47f88d75ad.html
测试目的:验证利用链接服务器、分布式查询获取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.0Excel 5.0
Office 2007 Microsoft.ACE.OLEDB.12.0Excel 12.0[需安装组件或打ServicePack 1.0]
创建链接服务器
DECLARE @RC intDECLARE @server nvarchar(128)DECLARE @srvproduct nvarchar(128)DECLARE @provider nvarchar(128)DECLARE @datasrc nvarchar(4000)DECLARE @location nvarchar(4000)DECLARE @provstr nvarchar(4000)DECLARE @catalog nvarchar(128)SET @server = 'XLTEST_SP'SET @srvproduct = 'Excel'SET @datasrc = 'c:\book1.xls'--注意因excel的版本不同,选择不同的接口参数SET @provider = 'Microsoft.Jet.OLEDB.4.0' SET @provstr = 'Excel 8.0'EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider, @datasrc, @location, @provstr, @catalog--获取链接服务器对应sheet1范围内的数据SELECT * FROM [Excel]...[Sheet1$]--针对Microsoft.ACE.OLEDB.12.0,还需告知SQL Server如果处理USE [master]GOEXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'AllowInProcess',1GOEXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',N'DynamicParameters',1GO
EXEC sp_configure 'show advanced options', 1GORECONFIGUREGOEXEC sp_configure 'Ad Hoc Distributed Queries', 1GORECONFIGUREGOselect * into NewTableFROM OPENROWSET ( 'Microsoft.ACE.OLEDB.12.0' , 'Excel 12.0;Database=c:\book1.xlsx;HDR=YES' , 'SELECT * FROM [sheet1$]' )END
USE master;EXEC sp_serveroption '服务器名称', 'rpc', 'true'; --启用RPC
学习。
[解决办法]