[图]如何使用SQL链接服务器查询外来数据

[图]如何使用SQL链接服务器查询外来数据,第1张

但我们大多数人都没有那么幸运。有时,我们需要的数据并非数据库格式,或者位于不同的服务器上。SQL Server具有足够的灵活性,提供大量你收集数据时所需要的方法。其中最方便的方法之一是使用链接服务器(linked server)直接连接数据。(微软SQL Server 2005 Express Edition也支持链接服务器。)何为链接服务器?简单来说,链接服务器是指与对象链接和嵌入数据库(OLEDB)数据源建立的一个连接。技术上说,OLEDB是一个从一系列数据源中恢复数据的标准微软API。如果这个解释还不够清楚,不用担心。好消息是,它足够灵活,可以连接数据库和非数据库格式,如一个电子表格或电子邮件客户端。简而言之,SQL Server支持任何OLEDB提供程序(也叫做驱动器)。另一个好消息:你可以使用Trnasact-sql或Management Studio来建立连接。建立一个链接服务器后,SQL Server就可以登录到另一台数据库服务器。那表示你可以在一台远程服务器上运行查询。你可以任意使用两种类型的链接服务器查询:特殊链接和永久链接。特殊链接技术上说,你不必使用“链接服务器”这个名词来确定一个特殊查询。那个名词实际上是指一个SQL Server对象。但是,你会经常看到这个名词用来指特殊链接查询。特殊查询打开和关闭一个连接。永久链接服务器一直可用。通过OPENROWSET完成非频繁的链接任务,使用以下语法:OPENROWSET('providername', 'datasource', 'username', 'password', object)OPENROWSET消耗更少的数据库空间。使用合法的Transact-sql语句来操作重新恢复的数据。其自变量不需要加以说明,但要记住的是,datasource是指数据源的完整路径,而不只是一个文件名。此外,provider提供SQL Server需要进入并收集数据的指令。它们专门针对你所访问的外来软件。现在,我们来看一个简单的特殊查询实例,并选择微软Access样本数据库Northwind的Employees表中的所有记录:SELECT*FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:Program FilesMicrosoft OfficeOffice11Office11SamplesNorthwind.mdb''admin''', Employees)AS EmployeesFromAccess图A显示的是迅速恢复的结果,它要求用户(管理员)拥有适当的许可。(如果你想运行这个查询,一定要把路径更新到Northwind.mbd,以与你的系统相适应。)提供程序字符串专门针对数据引擎Jet。AS关键字为SQL Server中的新表提供一个名称。图A:使用OPENROWSET完成外来数据的非频繁查询(Express版)。如果特殊查询返回错误消息,你可能需要激活特殊查询特性。(默认情况下,SQL Server禁用特殊查询。)要激活特殊查询,运行SQL Server配置管理器(SQL Server Express版外围应用配置器),点击外围配置特性(Surface Area Configuration For Features)链接,并查看激活OPENROWSET和OPENDATASOURCE支持(Enable OPENROWSET And OPENDATASOURCE Support)选项。然后,点击OK并关闭实用工具。

SQL Server 支持到其他 OLE DB 数据源的永久性连接或临时连接。永久性连接叫做链接服务器;为单个查询建立的临时连接叫做分布式查询。

Microsoft Excel 工作簿是一种可通过 SQL Server 以这种方式查询的 OLE DB 数据源。本文介绍了将 Excel 数据源配置为链接服务器所需的语法,以及使用分布式查询来查询 Excel 数据源所需的语法。

作为链接服务器查询 Excel

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

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

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

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

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

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

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

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

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

3.在常规选项卡上,按照下列步骤操作:a.在第一个文本框中,为该链接服务器键入任意名称。b.在服务器类型文本框中,单击其他数据源。c.在提供程序名称下拉列表框中,单击 Microsoft Jet 4.0 OLE DB 提供程序。d.在数据源文本框中,键入 Excel 文件的完整路径和文件名。e.在提供程序字符串文本框中,键入 Excel 8.0 代表 Excel 97、2000 或 2002 工作簿。f.单击确定以创建新的链接服务器。

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

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

使用存储过程配置 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'

您可以使用 SQL Server 分布式查询和 OPENDATASOURCE 或 OPENROWSET 函数临时查询很少访问的 Excel 数据源,如下所示: SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',

'Data Source=c:/book1.xlsExtended Properties=Excel 8.0')...Sheet1$

注意,OPENROWSET 对第二个(“提供程序字符串”)参数使用一种非常规语法: SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'Excel 8.0Database=c:/book1.xls', Sheet1$)

ActiveX 数据对象 (ADO) 开发人员按照常规应对 OPENROWSET 的第二个(“提供程序字符串”)参数使用的语法会 SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'Data Source=c:/book1.xlsExtended Properties=Excel 8.0', Sheet1$)

造成 Jet 提供程序出现以下错误:

Could not find installable ISAM.


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/283624.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存