包含访问 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 属性传递进来以初始化提供程序。user_id 不能是 Microsoft Windows NT® 登录名称。
'password'
字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 password 作为 DBPROP_AUTH_PASSWORD 属性传递进来。password 不能是 Microsoft Windows NT® 密码。
'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 提供程序的用户名的权限确定。
示例
A. 将 OPENROWSET 与 SELECT 语句及用于 SQL Server 的 Microsoft 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
B. 将 OPENROWSET 与对象及用于 ODBC 的 OLE DB 提供程序一起使用
下面的示例使用用于 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
C. 使用用于 Jet 的 Microsoft OLE DB 提供程序
下面的示例通过用于 Jet 的 Microsoft OLE DB 提供程序访问 Microsoft Access Northwind 数据库中的 orders 表。
说明 下面的示例假定已经安装了 Access。
USE pubs
GO
SELECT a.*
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
AS a
GO
D. 使用 OPENROWSET 和 INNER JOIN 中的另一个表
下面的示例从本地 SQL Server Northwind 数据库的 customers 表中,以及存储在相同计算机上 Access Northwind 数据库的 orders 表中选择所有数据
说明 下面的示例假定已经安装了 Access。
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
分享到:
相关推荐
SQL Server 提供了多种方式来调用 OPENROWSET,OPENROWSET 函数可以用来读取OLE DB 或 ODBC 数据源中的数据,提供了灵活的数据访问方式。但是,OPENROWSET 函数也可能会遇到 OLE DB 错误和性能问题,需要合理地配置...
通过创建链接服务器,可以在一个SQL Server实例中访问另一个SQL Server实例上的数据。 **创建链接服务器示例:** ```sql EXEC sp_addlinkedserver @server = 'srv_lnk', @srvproduct = '', @provider = '...
利用OPENROWSET,数据库管理员可以像使用普通表一样在查询的FROM子句中引用远程数据源,这在分布式应用中是基础性的技术。可以将OPENROWSET函数作为目标表引用,执行INSERT、UPDATE、DELETE等操作。 接下来详细探讨...
- **导入导出Excel**:可以使用`OpenRowSet`将Excel数据插入SQL Server表,或使用BCP将SQL Server表数据导出到Excel文件。 需要注意的是,`HDR`选项用于指定Excel文件的第一行是否为列名,`IMEX`参数用于处理未知...
**OpenRowSet**是一种特殊的SELECT语句,它可以访问SQL Server外部的数据源。在这个场景下,我们利用OpenRowSet来实现跨服务器复制。 假设我们有两个SQL Server实例:一个是本地服务器(localhost),另一个是远程...
SQL Server利用分布式查询和视图实现全局视图,例如,可以使用联结服务器和OPENROWSET函数来查询和访问不同数据源的数据。 安全机制的实现需要数据库管理员(DBA)根据具体的业务需求和安全政策进行配置和管理。DBA...
分布式查询允许你在单个SQL语句中访问和操作来自多个数据源的数据。在SQL Server中,可以通过`OPENROWSET`函数或者`OPENDATASOURCE`来实现。在给出的代码中,`EXEC sp_configure ‘Ad Hoc Distributed Queries’, 1;...
以分布式查询为例,可以使用SQL Server中的OPENDATASOURCE函数或OPENROWSET函数来访问Excel表数据。OPENDATASOURCE函数允许打开支持OLEDB的数据源,并可以作为SQL语句中表名的替代。通过指定提供者名称(provider_...
`OPENROWSET`是SQL Server提供的一种扩展的直接数据访问方式,它可以连接到ODBC数据源、OLE DB提供程序等。在这个例子中,`'SQLOLEDB'`表示我们要使用的是SQL Server的OLE DB提供程序。接着,我们提供了连接字符串,...
为了解决这个问题,可以使用OPENROWSET函数来访问远程数据,并执行分布式查询。 在这道题中,我们可以看到,OPENROWSET函数是一种使用OLE DB连接并访问远程数据的一次性的、特殊的方法,无需设置链接服务器。这种...
链接服务器是一种持久化的连接配置,而OPENROWSET则是一种临时性的数据访问机制,适用于偶尔或临时性的跨服务器数据检索。 #### 实际应用 在案例中,邮购公司的数据库开发人员需要从两台使用SQL Server 2000的...
- 选项 B 使用 `OPENROWSET` 函数执行分布式查询,但这通常用于一次性操作,而不是设置永久性的数据访问权限。 3. **SQL Server 管理对象 (SQL-DMO)**: - SQL-DMO 是 SQL Server 2000 提供的 COM 接口,允许通过...
5. **ActiveX数据对象(ADO)和OLE DB Provider**:通过编程方式,使用ADO和特定的OLE DB提供程序(如SQL Server或Jet 4.0)可以直接访问Excel数据并导入到SQL Server。 对于每种方法,都有其适用的场景和优缺点。...
可以使用 sp_addlinkedserver 系统存储过程来建立与远程服务器的连接,也可以使用 OPENROWSET 函数来访问远程数据。分布式查询可以方便地从远程服务器上检索数据。 3. 事务处理 在第三个试题中,需要解决的是如何...
8. 分布式查询增强:通过OPENROWSET()函数和分布式查询优化器,增强了OLE DB数据源的SQL操作能力。 9. 触发器类型:FOR子句用于指定触发器类型,区分INSTEAD OF和AFTER触发器。 10. 级联参考完整性约束:控制外键...
在描述中提到的问题是,当你尝试使用`OpenRowset`或`OpenDataSource`这两个函数来执行分布式查询时,系统会阻止这些操作,提示"Ad Hoc Distributed Queries"组件已被关闭。这是因为这些函数允许直接从其他数据源(如...
这展示了如何使用链接服务器进行分布式查询,无需额外的配置或使用`OPENROWSET`。 3. 事务优先级管理:在问题三中,涉及到事务的优先级设置。为了确保重要的事务(如插入员工姓名和地址)不被终止,应降低不重要...
综上所述,理解SQL Server中的`FOR XML`子句和分布式查询机制,如`OPENROWSET`和`SP_ADDLINKEDSERVER`,对于高效地管理和传输数据至关重要,尤其是在涉及多服务器架构的企业级应用中。这些知识点不仅适用于特定的...
讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado...