作为链接服务器查询 Excel

您可以使用企业管理器、系统存储过程或 SQL-DMO(分布式管理对象)将 Excel 数据源配置为 SQL Server 链接服务器。在所有的这些情况中,您总需要设置以下四个属性:

链接服务器要使用的名称。

连接要使用的 OLE DB 提供程序。

Excel 工作簿的数据源或完整路径和文件名。

将目标标识为 Excel 工作簿的提供程序字符串。默认情况下,Jet 提供程序需要 Access 数据库。

系统存储过程 sp_addlinkedserver 也需要 @srvproduct 属性,该属性可以是任何字符串值。

使用企业管理器配置 Excel 链接服务器

在企业管理器中,单击以展开安全文件夹。

右键单击链接服务器,然后单击新建链接服务器。

在常规选项卡上,按照下列步骤操作:

在第一个文本框中,为该链接服务器键入任意名称。

在服务器类型文本框中,单击其他数据源。

在提供程序名称下拉列表框中,单击 Microsoft Jet 4.0 OLE DB 提供程序。

在数据源文本框中,键入 Excel 文件的完整路径和文件名。

在提供程序字符串文本框中,键入 Excel 8.0 代表 Excel 97、2000 或 2002 工作簿。

单击确定以创建新的链接服务器。

单击以展开此新链接服务器的名称,从而展开它所包含的对象列表。

在新建链接服务器名称下,单击表。注意,工作表和命名区域将出现在右窗格中。

使用存储过程配置 Excel 链接服务器

您还可以使用系统存储过程 sp_addlinkedserver 将 Excel 数据源配置为链接服务器:

DECLARE @RC int

DECLARE @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 parameter values

SET @server = 'XLTEST_SP'

SET @srvproduct = 'Excel'

SET @provider = 'Microsoft.Jet.OLEDB.4.0'

SET @datasrc = 'c:\book1.xls'

SET @provstr = 'Excel 8.0'

EXEC @RC = [master].[dbo].[sp_addlinkedserver] @server, @srvproduct, @provider,

@datasrc, @location, @provstr, @catalog

如上所述,此存储过程另需一个任意字符串值作为 @srvproduct 参数的值,此参数在企业管理器配置中显示为“产品名称”。不使用 @location 和 @catalog 参数。

使用 SQL-DMO 配置 Excel 链接服务器

您可以使用 SQL 分布式管理对象从 Microsoft Visual Basic 或其他编程语言中将一个 Excel 数据源以编程方式配置为链接服务器。您必须也提供企业管理器配置中要求的那四个参数。

Private Sub Command1_Click()

Dim s As SQLDMO.SQLServer

Dim ls As SQLDMO.LinkedServer

Set s = New SQLDMO.SQLServer

s.Connect "(local)", "sa", "password"

Set ls = New SQLDMO.LinkedServer

With ls

.Name = "XLTEST_DMO"

.ProviderName = "Microsoft.Jet.OLEDB.4.0"

.DataSource = "c:\book1.xls"

.ProviderString = "Excel 8.0"

End With

s.LinkedServers.Add ls

s.Close

End Sub

查询 Excel 链接服务器

将 Excel 数据源配置为链接服务器之后,您可以方便地通过“查询分析器”或其他客户端应用程序查询其数据。例如,为了检索存储在 Excel 文件 Sheet1 中的数据行,以下代码使用了您使用 SQL-DMO 配置的链接服务器:

SELECT * FROM XLTEST_DMO...Sheet1$

您还可以使用 OPENQUERY 以“passthrough”(传递)方式查询 Excel 链接服务器,如下所示:

SELECT * FROM OPENQUERY(XLTEST_DMO, 'SELECT * FROM [Sheet1$]')

OPENQUERY 需要的第一个参数是链接服务器名称。工作表名称之间需要用分隔符分开,如上所示。

您还可以使用以下查询获得 Excel 链接服务器上所有可用表的列表:

EXECUTE SP_TABLES_EX 'XLTEST_DMO'