本文對SQL Server跨服務器連接的方式進行總結。
1、OPENDATASOURCE
在SQL文中直接用此語句打開數據庫示例:
OPENDATASOURCE('SQLOLEDB','Data Source=TQDBSV001;User ID=fish;Password=2312')。RackDB.dbo.CS 此方式較為簡單,但存在弊端就是速度很慢。
2、OPENROWSET
包括從 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.
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |