包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 提供程序的能力,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,然而 OPENROWSET 只返回第一个。
OPENROWSET ( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog.] [ schema.] object
| 'query' }
)
'provider_name'
字符串,它代表在注册表中指定的 OLE DB 提供程序的友好名。provider_name 没有默认值。
'datasource'
字符串常量,它对应着某个特定的 OLE DB 数据源。datasource 是将被传递到提供程序 IDBProperties 接口以初始化提供程序的 DBPROP_INIT_DATASOURCE 属性。通常,这个字符串包含数据库文件的名称、数据库服务器的名称,或者提供程序能理解的用于查找数据库的名称。
'user_id'
字符串常量,它是传递到指定 OLE DB 提供程序的用户名。user_id 为连接指定安全上下文,并将它作为 DBPROP_AUTH_USERID 属性传递进来以初始化提供程序。
'password'
字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 password 作为 DBPROP_AUTH_PASSWORD 属性传递进来。
'provider_string'
提供程序特定的连接字符串,将它作为 DBPROP_INIT_PROVIDERSTRING 属性传递进来以初始化 OLE DB 提供程序。通常 provider_string 封装初始化提供程序所需的所有连接信息。
catalog
目录或数据库的名称,其中驻留着指定的对象。
schema
架构的名称或指定对象的对象所有者名称。
object
对象名称,它唯一地标识出将要操作的对象。
'query'
是字符串常量,发送到提供程序并由提供程序执行。Microsoft® SQL Server™ 不处理该查询,但处理由提供程序返回的查询结果(直接传递查询)。对于有些提供程序,它们并没有通过表名而是通过命令语言表现自己的表格格式数据,那么将直接传递查询用于这些提供程序是非常有用的。只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持直接传递查询。有关更多信息,请参见 SQL Server OLE DB 程序员参考。
如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的值。
如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称,形式为 catalog.schema.object。
OPENROWSET 不接受参数变量。
OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。
下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器上。从 datasource、user_id 及 password 中初始化提供程序,并且使用 SELECT 语句定义返回的行集。
USE pubs GO SELECT a.* FROM OPENROWSET('SQLOLEDB','seattle1';'sa';'MyPass', 'SELECT * FROM pubs.dbo.authors ORDER BY au_lname, au_fname') AS a GO
下面的示例使用用于 ODBC 的 OLE DB 提供程序以及 SQL Server ODBC 驱动程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器中。提供程序用在 ODBC 提供程序所用的 ODBC 语法中指定的 provider_string 进行初始化,定义返回的行集时使用 catalog.schema.object 语法。
USE pubs GO SELECT a.* FROM OPENROWSET('MSDASQL', 'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass', pubs.dbo.authors) AS a ORDER BY a.au_lname, a.au_fname GO
下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。
<!--NOTE-->
说明下面的示例假定已经安装了 Access。
<!--/NOTE-->USE pubs GO SELECT a.* FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:/MSOffice/Access/Samples/northwind.mdb';'admin';'mypwd', Orders) AS a GO
下面的示例从本地 SQL Server Northwind 数据库的 customers 表中,以及存储在相同计算机上 Access Northwind 数据库的 orders 表中选择所有数据
<!--NOTE-->
说明下面的示例假定已经安装了 Access。
<!--/NOTE-->USE pubs GO SELECT c.*, o.* FROM Northwind.dbo.Customers AS c INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:/MSOffice/Access/Samples/northwind.mdb';'admin';'mypwd', Orders) AS o ON c.CustomerID = o.CustomerID GO
用于 Jet 的 Microsoft® OLE DB 提供程序为 Microsoft Access 数据库提供了 OLE DB 接口,并且使 Microsoft SQL Server™ 2000 分布式查询得以查询 Access 数据库。
创建链接服务器以访问 Access 数据库
例如,若要创建一个名为 Nwind 的链接服务器,对 C:/Mydata directory 目录中名为 Nwind.mdb 的 Access 数据库进行操作,请执行:
sp_addlinkedserver 'Nwind', 'Access 97', 'Microsoft.Jet.OLEDB.4.0', 'c:/mydata/Nwind.mdb'
下例使得本地用户 Joe 可以访问名为 Nwind 的链接服务器。
sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'Admin', NULL
要访问保密的 Access 数据库,需使用注册表编辑器配置注册表,以便使用 Access 所用的正确的工作组信息文件。使用注册表编辑器向该注册表项中添加 Access 使用的工作组信息文件的完整路径名称:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/SystemDB
配置了注册表项后,请使用 sp_addlinkedsrvlogin 创建从本地登录到 Access 登录的登录映射:
sp_addlinkedsrvlogin 'Nwind', false, 'Joe', 'AccessUser', 'AccessPwd'
Access 数据库没有目录和架构名称。因此,基于 Access 的链接服务器中的表可以在分布式查询中使用表单 linked_server...table_name 的四部分名称进行引用。
下例从名为 Nwind 的链接服务器中检索 Employees 表的所有行。
SELECT * FROM Nwind...Employees
创建链接服务器以访问 Excel 电子表格
用于 Jet 4.0 的 Microsoft OLE DB 提供程序可用于访问 Microsoft Excel 电子表格。
sp_addlinkedserver N'Excel', N'Jet 4.0', N'Microsoft.Jet.OLEDB.4.0', N'c:/data/MySheet.xls', NULL, N'Excel 5.0' GO sp_addlinkedsrvlogin N'Excel', false, sa, N'ADMIN', NULL GO
SELECT * FROM EXCEL...SalesData GO
将某行插入命名单元范围时,该行将添加到命名单元范围的最后一行之后。因此,如果想在列标题后插入行 rA,则将列标题单元与某个名称关联并使用该名称作为表名。当插入行时,单元范围将自动增长。
设置链接服务器以访问格式化文本文件
用于 Jet 的 Microsoft OLE DB 提供程序可用于访问并查询文本文件。
提供程序是 Microsoft.Jet.OLEDB.4.0,提供程序字符串为"Text"。数据源是包含文本文件的目录的完整路径名称。schema.ini 文件(描述文本文件的结构)必须与此文本文件存在于相同的目录中。有关创建 schema.ini 文件的更多信息,请参见 Jet 数据库引擎文档。
--Create a linked server. EXEC sp_addlinkedserver txtsrv, 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'c:/data/distqry', NULL, 'Text' GO --Set up login mappings. EXEC sp_addlinkedsrvlogin txtsrv, FALSE, NULL, Admin, NULL GO --List the tables in the linked server. EXEC sp_tables_ex txtsrv GO --Query one of the tables: file1#txt --using a 4-part name. SELECT * FROM txtsrv...[file1#txt]