如何在SQL Server中将Excel文件配置为链接服务器?

时间:2011-03-31 04:03:23

标签: sql-server sql-server-2005 excel linked-server

我已打开“链接服务器”对话框以创建链接服务器,以便我可以将我的Excel文件数据导入SQL Server 2005数据库。我必须使用哪个提供商以及我需要填写哪些其他设置?

2 个答案:

答案 0 :(得分:1)

您可以使用OLEDB提供程序或ODBC驱动程序提供程序进行设置,并使用服务器上的ODBC Administrator工具创建连接到Excel文件。您是否打算定期阅读此Excel文件?如果没有,那么将其设置为链接服务器可能会过度。

有关详细信息,请参阅“How to import data from Excel to SQL Server”和“How to use Excel with SQL Server linked servers and distributed queries

答案 1 :(得分:1)

对于使用SQL SERVER 2012+的用户,您可以使用SQL Server 2012+附带的Microsoft OLEDB 12.0 Provider,它允许您将Excel 2007-2013 xlsx文件用于adhoc分布式查询或作为链接服务器。以下示例。

Excel工作簿'Application.xlsx'有3个工作表Application,Device,User 首先在服务器上激活Ad Hoc查询。

USE MSDB
GO
sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OverRide
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE WITH OverRide
GO

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO

EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1

对于Ad Hoc Queries,请使用OPENROWSET函数。

SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel   8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [Application$]');

SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel   8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [Device$]');

SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel  8.0;Database=C:\Users\Administrator\Desktop\Application.xlsx;HDR=YES', 'SELECT * FROM [User$]');

为Excel 2007-2013格式创建链接服务器:

USE MSDB
GO
EXEC sp_addLinkedServer
@server= 'XLSX_MATRIX',
@srvproduct = 'ACE 12.0',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = 'C:\Users\Administrator\Desktop\Application.xlsx',
@provstr = 'Excel 12.0; HDR=Yes'

现在,以两种方式查询您的Excel文件:

SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [Application$]')
SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [Device$]')
SELECT * FROM OPENQUERY (XLSX_MATRIX, 'Select * from [User$]')

SELECT * FROM XLSX_MATRIX...[Application$]
SELECT * FROM XLSX_MATRIX...[Device$]
SELECT * FROM XLSX_MATRIX...[User$]