`
rimoer
  • 浏览: 99558 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OPENROWSET(Mssql-Excel)

 
阅读更多

OPENROWSET

包含访问 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 提供程序的用户名的权限确定。

示例
A. 将 OPENROWSET 与 SELECT 语句及用于 SQL Server 的 Microsoft OLE DB 提供程序一起使用

下面的示例使用用于 SQL Server 的 Microsoft OLE DB 提供程序访问 pubs 数据库中的 authors 表,该数据库在一个名为 seattle1 的远程服务器上。从 datasourceuser_idpassword 中初始化提供程序,并且使用 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 表。

<!--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
D. 使用 OPENROWSET 和 INNER JOIN 中的另一个表

下面的示例从本地 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 提供程序

用于 Jet 的 Microsoft® OLE DB 提供程序为 Microsoft Access 数据库提供了 OLE DB 接口,并且使 Microsoft SQL Server™ 2000 分布式查询得以查询 Access 数据库。

创建链接服务器以访问 Access 数据库

  1. 执行 sp_addlinkedserver 来创建链接服务器,指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,指定 Access .mdb 数据库文件的完整路径名作为 data_source。.mdb 数据库文件必须驻留在服务器上,data_source 在服务器上而不是在客户机上进行评估,路径必须是服务器上的有效路径。

    例如,若要创建一个名为 Nwind 的链接服务器,对 C:/Mydata directory 目录中名为 Nwind.mdb 的 Access 数据库进行操作,请执行:

    sp_addlinkedserver 'Nwind', 'Access 97', 'Microsoft.Jet.OLEDB.4.0', 
        'c:/mydata/Nwind.mdb'
    
  2. 为访问非保密的 Access 数据库,试图访问 Access 数据库的 SQL Server 登录应该有一个为用户名 Admin 定义的没有密码的登录映射。

    下例使得本地用户 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 电子表格。

  • 若要创建访问 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
    
  • 若要访问 Excel 电子表格中的数据,请将单元范围与名称相关联。可以通过将范围名称用作表名来访问命名范围。通过使用在上例中设置的链接服务器,下面的查询可用于访问称为 SalesData 的命名范围。
    SELECT *
    FROM EXCEL...SalesData
    GO
    

    将某行插入命名单元范围时,该行将添加到命名单元范围的最后一行之后。因此,如果想在列标题后插入行 rA,则将列标题单元与某个名称关联并使用该名称作为表名。当插入行时,单元范围将自动增长。

设置链接服务器以访问格式化文本文件

用于 Jet 的 Microsoft OLE DB 提供程序可用于访问并查询文本文件。

  • 若要直接创建访问文本文件的链接服务器而不将文件链接为 Access .mdb 文件中的表,请执行 sp_addlinkedserver,如下例所示。

    提供程序是 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]
    
<!--END-->

分享到:
评论

相关推荐

    asp导出Excel,导入Excel到MSSQL

    本话题将深入探讨如何利用ASP进行Excel文件的导出和将Excel数据导入到MSSQL数据库的过程。 **一、ASP导出Excel** 1. **创建Excel对象**:首先,我们需要在ASP页面中创建一个Excel对象,通过VBScript或JScript来...

    数据转换-MSSQL_ACCESS_EXCEL

    - OPENROWSET函数:SQL Server可以直接通过OPENROWSET函数读取Excel文件中的数据,将其视为临时表进行处理。 - SSIS:同样,SSIS也可以用来从Excel文件中导入数据到SQL Server,支持批量导入和复杂的转换逻辑。 3...

    mssql2000导入excel数据

    此外,标签“源码 工具”暗示可能还有涉及自定义脚本的方法,比如使用Transact-SQL的`OPENROWSET`函数或者` Bulk Insert`语句来批量导入Excel数据。这些方法适用于自动化导入过程,尤其是当向导不能满足特定需求时。...

    Excel导入或导出至MSSQL数据库

    2. **使用SQL语句**:编写SQL的`INSERT INTO`语句,结合`OPENROWSET`函数,可以直接读取Excel文件并插入数据到MSSQL表中。例如: ```sql INSERT INTO YourTable SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB....

    SQL Server导出表到EXCEL文件的存储过程

    10. **插入数据**:最后,使用`OPENROWSET`函数或类似的方法将数据从源表插入到Excel文件中对应的表中。 #### 详细步骤分析: 1. **参数定义**:存储过程接受三个参数:表名、文件路径和文件名。其中文件名默认为...

    通过VFPOLEDB批量导入数据到MSSQL2000

    标题《通过VFPOLEDB批量导入数据到MSSQL2000》和描述《通过VFPOLEDB直接将DBF表数据批量导入MSSQL2000数据库中,在实际企业开发中,经常会用到,导入数据超快,比EXCEL导入快上很多,导入数据后立即释放表资源》提到...

    Select data from an Excel sheet in MSSQL

    在MSSQL环境中,可以使用`OPENROWSET`函数来连接并查询非SQL Server数据源,例如Excel文件。以下为一个基本示例: ```sql SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=YES;IMEX=1;...

    本地excel文件导入到sql中

    - **直接导入**:某些数据库系统如SQL Server提供直接导入Excel的功能,通过图形化界面或SQL命令(如`OPENROWSET(BULK...)`)实现。 - **导出为CSV**:Excel可以另存为CSV(逗号分隔值)文件,大部分数据库支持...

    Extraor.Util.Data.zip

    - 编写T-SQL语句,如`BULK INSERT`或`INSERT INTO...SELECT`,结合Openrowset函数直接从Excel文件加载数据。 - 使用Power Query(在Excel 2010及以后版本中称为“获取和转换数据”),可以将Excel数据连接到MSSql...

    Execl数据如何导入SQL Server 2005

    \[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MicrosoftSQLServer\MSSQL.1\Providers\Microsoft.Jet.OLEDB.4.0] - 在此路径下新建一个 DWORD (64 位值),命名为 `DisallowAdhocAccess`,并将其值设为 `0`。 - 这一步...

    SQL Server SQL语句导入导出大全

    Extended Properties="Excel 8.0"'`:连接字符串,其中`Excel 8.0`对应Excel 2003及以前版本的文件格式。 ##### dBase文件的导入: ```sql SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'dBaseIV;HDR=NO;...

    sqlserver 卸载专用

    2. **Openrowset函数**:在SQL查询中,你可以利用`OPENROWSET`函数直接读取Excel文件,如`INSERT INTO YourTable SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\YourFile.xls', '...

    本地查询分析器中连接局域网内的其他数据库

    它可以访问支持OLE DB接口的数据源,包括但不限于SQL Server、Oracle、Excel等。对于本文讨论的情况,即连接局域网内的其他数据库,我们可以使用`OPENROWSET`函数来连接到远程SQL Server实例。 #### 2. 使用`...

    SQL跨服务器操作

    本文主要聚焦于如何在MSSQL中进行跨服务器操作,涉及到的数据源包括MSSQL、Excel、DB2、Oracle和XML等。关键在于使用MSDASQL驱动接口来实现这一功能。 首先,要建立连接服务器和链接服务器登录。通过`sp_...

    dbu.rar_DBU_批量添加

    SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\Path\To\Your\File.xls', 'SELECT * FROM [Sheet1$]') ``` 5. **DBU工具**:如果使用DBU工具,你可能需要配置工具的设置以支持批量...

    sql server 2005 小型快餐店.数据库系统.mdf

    - BULK INSERT和OPENROWSET函数可批量导入数据,对于快餐店初始数据加载非常实用。 - 导出数据到Excel或其他格式,方便数据分析和分享。 通过这个小型快餐店数据库实例,初学者可以实践数据库设计、查询、安全...

Global site tag (gtag.js) - Google Analytics