1. 程式人生 > >用openrowset函數操作遠程數據庫

用openrowset函數操作遠程數據庫

標識 用戶名 query 文件的 查詢 win server 進行 安全上下文

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 表。

說明 下面的示例假定已經安裝了 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

--把本地的數據插入服務器 insert openrowset( ‘SQLOLEDB‘, ‘211.102.91.187 ‘; ‘www_dgcgh_com‘; ‘jshchg20050916‘,[www_dgcgh_com].dbo.product) select * from product where id=‘232‘


--把本地的數據插入服務器

insert openrowset( ‘SQLOLEDB‘, ‘遠程服務器IP ‘; ‘用戶名‘; ‘用戶密碼‘,數據庫名.dbo.表名) select * from 表名 where id=‘232‘

用openrowset函數操作遠程數據庫