`
lizhiyu211
  • 浏览: 230497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OpenDataSource、OPENQUERY、OPENROWSET用法(转)

阅读更多

OpenDataSource、OPENQUERY、OPENROWSET用法

数据库 2008-07-26 08:50:11 阅读248 评论0  字号: 订阅

一、OpenDataSource ############################## 

1.       操作SQL服务器数据,如SQL Server /Oracle等等

格式:

SELECT   top 10 *

FROM      OPENDATASOURCE(

         'ProviderName',

         'Data Source=ServerName;User ID=LoginUser;Password=Password'

         ).[DataBaseName].dbo.TableName

以上是以我公司数据库为,OrderMaster 是销售单表

如:

SELECT   top 10 *

FROM      OPENDATASOURCE(

         'SQLOLEDB',

         'Data Source=globe01;User ID=xw_cai;Password=123'

         ).[order].dbo.ordermaster

2.       操作Excel表

格式:

SELECT *

FROM OpenDataSource( 'MICROSOFT.JET.OLEDB.4.0',

 'Data Source="Excel文件所存放的路径";User ID=;Password=;Extended properties=Excel 5.0')...SheetName$

SheetName工作区名称,其工作区的名称的后缀$不能少

如:

SELECT *

FROM OpenDataSource( 'MICROSOFT.JET.OLEDB.4.0',

 'Data Source="G:\WorkEveryDay\DayDo\OrderList";User ID=;Password=;Extended properties=Excel 5.0')...OrderList$

3.       操作Text文本文件

格式:

SELECT * FROM

OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',

'Text;HDR=no;Database=存放Text文本文件路径')...[TextName#txt]

TextName是文本文件名称,txt是文本文件后缀,其中#不能少,不能将#改为.也报错,格式TextName.txt是不正确,正确TextName#txt。Database=’\’最后一个\不能少。

例子:

SELECT * FROM

OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0',

'Text;HDR=no;Database=E:\Study\C#\Data\學習資料\Text\')...[textName#txt]

 

二、OPENQUERY     #############################

 

语法

OPENQUERY ( linked_server , 'query' )

变量说明

linked_server

用来连接其它数据库服务器的标志符。也就是已经和某台数据库服务已建立连接。

 

'query’

SQL查询语句

格式:

SELECT *

FROM OPENQUERY(ServerName/IPAddress, 'SELECT * FROM DataBaseName.dbo.TableName ')

例子:

SELECT *

FROM OPENQUERY([192.168.42.43], 'SELECT top 10 * FROM pubs.dbo.authors ORDER BY au_lname, au_fname')

注:连接用什么名,此处就用什么名,服务器的名称/IP地址,都可以访问

 

 

三、OPENROWSET ###########################

select * from openrowset('MSDASQL',

'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',

'select * from 表名')

-------------------------------------------------------------------------------------------------------------

包括從 OLE DB 資料來源存取遠端資料需要的所有連線資訊。這個方法是在連結伺服器存取資料表的替代方法,而且是使用 OLE DB 連線與存取遠端資料的一次、特定的方法。OPENROWSET 函數可以在查詢的 FROM 子句中當作資料表名稱來參考。根據 OLE DB Provider 的能力,OPENROWSET 函數也可以當作 INSERT、UPDATE 或 DELETE 陳述式的目標資料表來參考。雖然查詢可能會傳回多個結果集,OPENROWSET 只傳回第一個結果集。

語法

OPENROWSET ( 'provider_name'

    , { 'datasource' ; 'user_id' ; 'password'

        | 'provider_string' }

    , { [ catalog.] [ schema.] object

        | 'query' }

    )

引數

'provider_name'

代表登錄中指定的 OLE DB Provider 的親和名稱之字元字串。provider_name 沒有預設值。

'datasource'

是對應到特殊 OLE DB 資料來源的字串常數。datasource 是要傳送到提供者 IDBProperties 介面以初始化提供者的 DBPROP_INIT_DATASOURCE 屬性。一般而言,此字串包括資料庫檔案名稱、資料庫伺服器名稱或提供者了解並用以尋找資料庫的名稱。

'user_id'

是要傳送到指定的 OLE DB Provider 的使用者名稱字串常數。user_id 指定連線的安全性內容且以 DBPROP_AUTH_USERID 屬性傳送以初始化提供者。

'password'

是要傳送到 OLE DB Provider 的使用者密碼字串常數。初始化提供者時,password 以 DBPROP_AUTH_PASSWORD 屬性傳送。

'provider_string'

是以 DBPROP_INIT_PROVIDERSTRING 屬性傳送以初始化 OLE DB Provider 的特定提供者連線字串。provider_string 一般會包含所有初始化提供者時需要的所有連線資訊。

catalog

是有指定物件的資料庫目錄或資料庫名稱。

schema

是指定物件的結構描述或物件擁有者名稱。

object

唯一指定要操作的物件之物件名稱。

'query'

傳送到提供者並由提供者執行的字串常數。MicrosoftR SQL Server? 不處理此查詢,但處理由提供者傳回的查詢結果 (傳遞查詢)。傳遞查詢用在不經由資料表名稱而只經由命令語言顯露其表格資料的提供者時,非常有用。只要查詢提供者支援 OLE DB Command 物件及其強制介面,遠端伺服器就支援傳遞查詢。如需詳細資訊,請參閱 SQL Server OLE DB Programmer's Reference。

備註

如果 OLE DB Provider 支援指定的資料來源中的多個目錄與結構描述,就需要資料庫目錄與結構描述名稱。如果 OLE DB Provider 不支援,可以省略 catalog 與 schema 的值。

如果提供者只支援結構描述名稱,必須指定 schema.object 格式之兩個部份的名稱。如果提供者只支援資料庫目錄名稱,必須指定 catalog.schema.object 格式之三個部份的名稱。

OPENROWSET 不接受變數作為其引數。

權限

OPENROWSET 權限由傳送到 OLE DB Provider 的使用者名稱的權限來決定。

範例

A. 使用有 SELECT 的OPENROWSET 與 Microsoft OLE DB Provider for SQL Server

以下範例使用 Microsoft OLE DB Provider for SQL Server,以存取命名為 seattle1 的遠端伺服器上 pubs 資料庫的 authors 資料表。從 datasource、user_id 與 password 初始化提供者,且使用 SELECT 來定義傳回的資料列集。

格式:

SELECT a.*

FROM OPENROWSET('SQLOLEDB’,'ServerName';'LoginUser';'Password',

   'SELECT * FROM [DatabaseName].dbo.TableName ORDER BY ColName1, ColName12') AS a

说明:查询所提供的驱动程序(SQLOLEDB是查询SQL Server),查询SQL服务器ServerName下的Databasename中的数据TableName表中的数据(SQL语句),其实用户权限是LoginUser。

例子:

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 與 OLE DB Provider for ODBC

以下範例使用 OLE DB Provider for ODBC 與 SQL Server ODBC 驅動程式,來存取命名為 seattle1 的遠端伺服器上 pubs 資料庫的 authors 資料表。以 ODBC 提供者使用的 ODBC 語法指定之 provider_string 來初始化提供者,並使用 catalog.schema.object 語法來定義傳回的資料列集。

格式:这连接方式是ODBC数据的驱动程序

SELECT a.*

FROM OPENROWSET('MSDASQL',

   'DRIVER={SQL Server};SERVER=ServerName;UID=LoginUser;PWD=Password,

    [DatabaseName].dbo.TableName) AS a

ORDER BY ColName1, ColName12

 

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. 使用 Microsoft OLE DB Provider for Jet

以下範例藉由Microsoft OLE DB Provider for Jet 存取 Microsoft Access Northwind 資料庫中的 orders 資料表。

1.附註 以下範例假設已經安裝 Access。

1、

USE pubs

GO

SELECT a.*

FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

   'c:\MSOffice\Access\Samplesorthwind.mdb';'admin';'mypwd', Orders)

   AS a

GO

2、

select * from openrowset('Microsoft.Jet.OLEDB.4.0',

'E:\Study\Access\test.mdb';'admin';'','select * from student')

SELECT a.*

FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0',

   'E:\Study\Access\test.mdb';'admin';'', student)

  AS a

2.是以Excel为例,必须安装了Excel

select * 

from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=G:\WorkEveryDay\DayDo\OrderList',OrderList$) 

DATABASE=G:\WorkEveryDay\DayDo\OrderList'是Excel的表名及路径

,OrderList$是工作区的名字MICROSOFT.JET.OLEDB.4.0是Excel的驱动程序,也可以用MICROSOFT.JET.OLEDB.5.0,MICROSOFT.JET.OLEDB.8.0,我测试所用的window 2003及SQL Server 2000其中OrderList$所面的$不能少,要不能报错,$是代表是工作区3.以VFP(DBF文件名)

select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=D:\','select * from [temp.DBF]')

说明:SourceType是数据源类型,SourceDB是数据源,后面是操作DBF的SQL查询语句。

 

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\Samplesorthwind.mdb';'admin';'mypwd', Orders)

   AS o

   ON c.CustomerID = o.CustomerID

GO

E.将存储过程的记录集插入到虚拟表中(执行的存储不策有全局虚拟表)

如:

SELECT * into #t

FROM OPENQUERY([192.168.42.43], 'exec [Order].dbo.Or_Select_BackListDetail ''BK0607190001''')

如下:就会报错,必须先建表create table #t,而且此虚拟表的参数一定要与存储过程的参数一样。

Insert into #t

exec [Order].dbo.Or_Select_BackListDetail 'BK0607190001'

F:将打开的相应的文件(dbf,exec等等),从SQL里插入数据进行

insert into   

--select * from

openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=d:\',

'select * from temp.DBF')

select top 100 orderno,shipto from ordermaster

注:

 1、两数字段结构一样(长度、类型)  

 2、保证导出表没有为null或空的字段  

 3、将你上面的语句改为下面的select   *   from   tmp.DBF,就是不要那个[] 

分享到:
评论

相关推荐

    SQL_Excel数据格式转换实现方法.pdf

    例如,CONTAINS TABLE、FREETEXTTABLE、OPENDataSource、OPENQUERY、OPENROWSET和OPENXML等函数可以用于数据转换。其中,OPENDataSource函数可以不使用链接服务器名而直接提供特殊连接信息,该信息允许用户在...

    SQL SERVER连接oracle数据库几种方法

    我们可以使用多种方法来连接 Oracle 数据库,包括使用 OPENDATASOURCE、链接服务器、OPENQUERY 和 ODBC 等。同时,我们也需要注意解决 Ad Hoc Distributed Queries 访问限制,以便实现数据交换和集成。

    同步数据库

    深度探讨数据库同步的基本概念、技术原理以及实现方法,特别是SQL Server中的链接服务器功能,包括`sp_addlinkedserver`、`sp_addlinkedsrvlogin`、`openrowset`、`openquery`和`opendatasource`的使用技巧。...

    跨数据库实现数据交流

    OPENROWSET函数的使用方法与OPENDATASOURCE类似,也包含provider_name、datasource、username和password参数,不同之处在于OPENROWSET还支持将查询语句作为参数直接传入。 需要注意的是,这两种方法在安全性方面...

    网络数据库问题文.pdf

    本文将详细解析两种主要的方法:使用链接服务器和通过OpenRowset/OpenQuery/OpenDataSource函数。 首先,**链接服务器**是SQL Server提供的一种机制,允许用户在本地服务器执行查询,同时访问远程数据库中的数据。...

    sql server 从一个数据库复制一张表到另外一个数据库

    使用 SQL Server 将表从一个数据库复制到另一个数据库可以使用多种方式,包括创建链接服务器、使用 openrowset、使用 openquery、使用 opendatasource 等。每种方式都有其优缺,选择哪种方式取决于具体的应用场景。

    不同数据库间的数据操作

    本文详细介绍了如何使用T-SQL语句来实现不同数据库之间的数据操作,包括创建链接服务器、使用`OPENROWSET`、`OPENQUERY`和`OPENDATASOURCE`等方法。这些技术在实际开发中非常有用,尤其是在需要进行数据同步或迁移的...

    不同服务器数据库之间的数据操作.pdf

    本文将深入探讨如何在不同服务器数据库之间进行数据操作,主要涉及创建链接服务器、使用`openrowset`、`openquery`和`opendatasource`等方法。 首先,创建链接服务器是实现跨服务器数据访问的基础。`sp_...

    不同服务器数据库之间的数据操作

    本文详细介绍了如何在不同的服务器数据库之间执行数据操作,包括创建链接服务器、查询远程数据、导入数据、删除链接服务器以及使用 `OPENROWSET`、`OPENQUERY` 和 `OPENDATASOURCE` 等方法。这些技术对于实现跨...

    连接其它服务器数据库查询数据(sql server)

    表名 --以后不再使用时删除链接服务器 exec sp_dropserver '链接名', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) --1、openrowset --查询示例 select * from openrowset( 'SQLOLEDB...

    经典SQL语句大全

    2. **OpenQuery 用法需要创建一个连接**: - 通过`OPENQUERY`执行远程查询。 ```sql SELECT * FROM OPENQUERY(remote_server, 'SELECT * FROM remote_table'); ``` 3. **OpenDataSource/OpenRowSet**: - 通过`...

    远程数据库链接

    SQL Server 提供了多种方式来实现远程数据库连接,包括创建链接服务器(Linked Servers)、使用 `OPENROWSET`、`OPENQUERY` 和 `OPENDATASOURCE` 函数等。这些方法各有优势,适用于不同场景下的数据访问需求。 ####...

    Sql Server2000跨服务器查询数据库

    `OpenQuery`与`OpenRowSet`类似,但它提供了更强大的查询能力,允许执行更复杂的查询语句。 **示例代码**: ```sql -- 创建链接服务器(如果未创建的话) EXEC sp_addlinkedserver @server = 'ITSV', @srvproduct...

    SQL操作远程数据库

    SQL 远程数据库操作详解 SQL 远程数据库操作是指在不同的服务器之间进行数据的交互和共享,例如跨服务器...链接服务器、openrowset 函数、openquery 函数和 opendatasource 函数是常用的方法来连接远程数据库服务器。

    服務器表的創建

    除了直接使用链接服务器外,还可以通过`OPENROWSET`、`OPENQUERY`和`OPENDATASOURCE`等功能来实现跨服务器数据操作。 - **OPENROWSET**: 可以用来从远程服务器检索数据并返回结果集。 - **查询示例**: ```sql ...

    数据库分布式查询sqlserver

    `OpenQuery`类似于`OpenRowSet`,但它允许执行更复杂的查询语句。它主要用于从远程数据源执行SQL查询。 **查询示例:** ```sql SELECT * FROM OPENQUERY(srv_lnk, 'SELECT * FROM database_name.dbo.table_name')...

    sql ---跨服务器数据库操作

    通过合理利用SQL Server提供的`sp_addlinkedserver`、`OpenRowSet`、`OpenQuery`和`OpenDataSource`等功能,可以有效地提高系统的灵活性和可用性。同时,正确管理和维护这些链接服务器和登录映射也是确保数据安全性...

    跨数据库数据交流

    2. **使用OPENDATASOURCE/OPENROWSET/OPENQUERY**: - **OPENDATASOURCE**:可以用来直接执行一个查询,其语法类似`SELECT * FROM OPENDATASOURCE ('SQLOLEDB', 'Data Source=DestinationServerIP;User ID=UserName...

Global site tag (gtag.js) - Google Analytics