存取外部資料

若要存取 OLE DB 資料來源的資料,您必須將以下資訊提供給 SQL Server:

  • 公開資料來源之 OLE DB 提供者的名稱。

  • OLE DB 提供者在尋找資料來源時必須要有的任何資訊。

  • OLE DB 資料來源可公開成資料列集的物件名稱,或是可傳送至 OLE DB 提供者,而導致資料來源公開資料列集的查詢。可公開成資料列集的物件稱為遠端資料表。產生資料列集的查詢稱為傳遞查詢 (Pass-through Query)。

  • 您可以選擇性地將 OLE DB 資料來源的有效登入識別碼提供給 SQL Server。

SQL Server 可在 Transact-SQL 陳述式中支援參考異質性 OLE DB 資料來源,藉由使用:連接伺服器名稱及特定電腦名稱。

連結伺服器名稱

連結伺服器是使用存取 OLE DB 資料來源所需的所有資訊,對 SQL Server 定義的虛擬伺服器。連結伺服器名稱是使用 sp_addlinkedserver 系統預存程序來定義。連結伺服器定義包含尋找 OLE DB 資料來源所需的所有資訊。本機 SQL Server 登入會使用 sp_addlinkedsrvlogin 對應到連結伺服器的登入。

將連結伺服器名稱作為以下其中之一,就可以參考遠端資料表:

  • Transact-SQL 陳述式內的四部份名稱資料表或檢視參考的伺服器名稱。名稱中的其他三個部份將參考公開成資料列集之連結伺服器內的物件。

  • OPENQUERY 函數的輸入參數。OPENQUERY 會將一個指令傳給 OLE DB 提供者讓它執行。接著傳回的資料列集可作為 Transact-SQL 陳述式內的資料表或檢視參考。

如需詳細資訊,請參閱<使用連結伺服器名稱來識別資料來源>。

特定名稱

對於未定義成連結伺服器的 OLE DB 資料來源,特定名稱可用於不常用的查詢。在 SQL Server 中,OPENROWSET 與 OPENDATASOURCE 函數可提供用以存取 OLE DB 資料來源資料的連接資訊。

依預設,不支援特定名稱。[DisallowAdhocAccess] 提供者選項必須設為 0,而且必須啟用 [特定分散式查詢] 進階組態選項。

安全性注意事項安全性注意事項

啟用使用特定名稱,代表 SQL Server 的任何驗證登入都可以存取該提供者。SQL Server 系統管理員應該只對高度信任的提供者啟用此功能,由任何本機登入存取都很安全。

OPENROWSET 與 OPENDATASOURCE 只能用來參考不常存取的 OLE DB 資料來源。對於經常存取的資料來源,請定義連結伺服器。OPENDATASOURCE 或 OPENROWSET 都無法提供連結伺服器定義的完整功能。這包括安全性管理以及查詢類別目錄資訊的能力。每次這些函數被呼叫時,都必須提供所有連接資訊,包括密碼在內。

OPENROWSET 及 OPENDATASOURCE 似乎是函數,而且為了方便都參考為函數;但是,OPENROWSET 及OPENDATASOURCE 是巨集,而且不支援將 Transact-SQL 變數作為引數提供。

OPENROWSET 可與傳回資料列集的任何 OLE DB 提供者一起使用 ,並可用於 Transact-SQL陳述式內能夠使用資料表或檢視參考的任何位置。OPENROWSET 會以下列項目指定:

  • 連接到 OLE DB 資料來源所需的所有資訊。

  • 可產生資料列集的物件名稱或是將會產生資料列集的查詢。

OPENDATASOURCE 會將連接資訊作為四部份物件名稱的一部份來提供。此函數只支援使用 catalog**.schema.**object 標記法,來公開多個資料列集的 OLE DB 提供者。OPENDATASOURCE 可用於能使用連結伺服器名稱的 Transact-SQL 語法位置。OPENDATASOURCE 會以下列項目指定:

  • 作為存取資料來源的 OLE DB 提供者的 PROGID 而註冊的名稱。

  • 指定欲傳給 OLE DB 提供者之不同連接屬性的連接字串。連接字串語法是一系列的關鍵字數值配對。基本語法定義於 Microsoft Data Access 軟體開發套件內,而且每個提供者將會替所支援的特定關鍵字數值配對提供相關的文件集。如需有關連接字串的詳細資訊,請參閱<OPENDATASOURCE (Transact-SQL)>。

如需詳細資訊,請參閱<使用特定名稱來識別資料來源>。

存取連結伺服器

使用 sp_addlinkedserver 建立連結伺服器之後,該伺服器可使用以下方式進行存取:

  • 分散式查詢會使用連結伺服器型的名稱,透過 SELECT、INSERT、UPDATE 與 DELETE 陳述式,存取連結伺服器中的資料表。

  • 您可使用四部份名稱 (Four-part Name) 對連結伺服器執行預存程序。

  • 使用 AT linked_server_name 延伸模組,執行任意參數化傳遞命令的 EXECUTE 陳述式。此命令包括會傳回多個結果的資料定義語言 (DDL) 及資料操作語言 (DML) 陳述式或命令。如需詳細資訊,請參閱<使用傳遞查詢做為資料表>。

sp_addserver 會當作是現有應用程式的相容性功能來維護,但未來的版本將不會支援此預存程序。當應用程式匯至 SQL Server 2008 時,可能需要花一段時間,使用連結伺服器定義的分散式查詢來執行一些新的程式碼,或使用遠端伺服器定義執行一些傳統的程式碼。連結伺服器及遠端伺服器都會使用相同的名稱空間。因此,連結伺服器或遠端伺服器定義使用的名稱,必須跟遠端存取之伺服器的網路名稱不同。以不同的伺服器名稱來定義某個項目,並使用 sp_setnetname 來將該定義與遠端伺服器的網路名稱建立關聯。