SQL Server 跨伺服器操作

2022-07-29 07:33:10 字數 3484 閱讀 1775

包含訪問 ole db 資料來源中的遠端資料所需的全部連線資訊。當訪問鏈結伺服器中的表時,這種方法是一種替代方法,並且是一種使用 ole db 連線並訪問遠端資料的一次性的、特殊的方法。可以在查詢的 from 子句中像引用表名那樣引用 openrowset 函式。依據 ole db 提供程式的能力,還可以將 openrowset 函式引用為 insert、update 或 delete 語句的目標表。儘管查詢可能返回多個結果集,然而 openrowset 只返回第乙個。

語法openrowset( 'provider_name'

,,

)

引數'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 dbcommand物件及其強制介面,那麼在遠端伺服器上就支援直接傳遞查詢。有關更多資訊,請參見 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

goselect 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

goselect a.*

from openrowset('msdasql',

'driver=;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 accessnorthwind資料庫中的orders表。

說明下面的示例假定已經安裝了 access。

use pubs

goselect 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 servernorthwind資料庫的customers表中,以及儲存在相同計算機上 accessnorthwind資料庫的orders表中選擇所有資料

說明下面的示例假定已經安裝了 access。

use pubs

goselect 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

SQL Server 跨伺服器操作

不同伺服器資料庫之間的資料操作 建立鏈結伺服器 exec sp addlinkedserver itsv sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin itsv false null,使用者名稱 密碼 查詢示例 select from itsv.資料庫...

跨伺服器訪問SQLSERVER

建立鏈結伺服器 exec sp addlinkedserver wqjk sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin wqjk false null,使用者名稱 密碼 查詢示例 select from itsv.資料庫名.dbo.表名 匯入示例 se...

SQL Server跨伺服器查詢

建立鏈結伺服器 exec sp addlinkedserver itsv sqloledb 遠端伺服器名或ip位址 exec sp addlinkedsrvlogin itsv false null,使用者名稱 密碼 查詢示例 select from itsv.資料庫名.dbo.表名 匯入示例 se...