共用方式為


建立連結伺服器(SQL Server Database Engine)

本主題說明如何使用 SQL Server Management Studio 或 Transact-SQL,建立連結的伺服器,並從另一部 SQL Server 存取數據。 透過建立連結的伺服器,您可以使用多個來源的資料。 鏈接的伺服器不一定是 SQL Server 的另一個實例,但這是常見的案例。

背景

鏈接的伺服器可讓您存取 OLE DB 資料源的分散式異質查詢。 建立連結的伺服器之後,即可對這部伺服器執行分散式查詢,而且查詢可以加入來自多個資料來源的資料表。 如果鏈接的伺服器定義為 SQL Server 的實體,則可以執行遠端預存程式。

連結之伺服器的功能以及所需的引數可能會大大地改變。 本主題中的範例提供一般範例,但不會描述所有選項。 如需詳細資訊,請參閱 sp_addlinkedserver (Transact-SQL)

安全

權限

使用 Transact-SQL 語句時,需要 ALTER ANY LINKED SERVER 伺服器的許可權或 setupadmin 固定伺服器角色的成員資格。 使用 Management Studio 時,需要擁有 CONTROL SERVER 許可權或是成為 系統管理員 固定伺服器角色的成員。

如何建立連結的伺服器

您可以使用下列任一項:

使用 SQL Server Management Studio

使用 SQL Server Management Studio 為另一個 SQL Server 實例建立連結伺服器
  1. 在 SQL Server Management Studio 中,開啟 [物件總管],展開 [伺服器物件],以滑鼠右鍵按兩下 [鏈接的伺服器],然後按兩下 [ 新增連結的伺服器]。

  2. 在 [ 一般 ] 頁面上,於 [ 鏈接的伺服器 ] 方塊中,輸入您所連結之 SQL Server 實例的名稱。

    SQL Server
    將連結的伺服器識別為 MicrosoftSQL Server 的實例。 如果您使用這個方法來定義 SQL Server 連結伺服器, 則連結伺服器 中指定的名稱必須是伺服器的網路名稱。 另外,從伺服器擷取的任何資料表,都會是來自已連結伺服器上之登入所定義的預設資料庫。

    其他資料來源
    指定 SQL Server 以外的 OLE DB 伺服器類型。 按一下這個選項會啟動在它下面的選項。

    提供者
    從清單方塊中選取 OLE DB 資料來源。 OLE DB 提供者已使用給定的 PROGID 在登錄中註冊。

    產品名稱
    輸入 OLE DB 資料來源的產品名稱,以加入成為連結的伺服器。

    資料來源
    輸入 OLE DB 提供者認定的資料來源名稱。 如果您要連線到 SQL Server 實例,請提供實例名稱。

    提供者字串
    輸入對應至資料來源之 OLE DB 提供者的唯一程式設計識別碼 (PROGID)。 如需有效提供者字串的範例,請參閱 sp_addlinkedserver (Transact-SQL)

    地點
    依 OLE DB 提供者的解譯,輸入資料庫的位置。

    目錄
    輸入連接到 OLE DB 提供者時,要使用的目錄名稱。

    若要測試連線到連結伺服器的能力,請在 [物件總管] 中,以滑鼠右鍵按一下連結的伺服器,然後按一下 [測試連線]。

    備註

    如果 [SQL Server] 的執行個體是預設的執行個體,請輸入裝載 [SQL Server] 執行個體之電腦的名稱。 如果 SQL Server 是具名執行個體,請輸入電腦的名稱和執行個體的名稱,例如 Accounting\SQLExpress

  3. 在 [ 伺服器類型 ] 區域中,選取 [SQL Server ] 以指出連結的伺服器是 SQL Server 的另一個實例。

  4. 在 [ 安全性] 頁面上,指定原始 SQL Server 連接到連結伺服器時將使用的安全性內容。 在使用者使用其網域登入進行連線的網域環境中,選擇「使用登入的目前安全性語境進行操作」通常是最佳選擇。 當使用者使用 [SQL Server] 登入連線到原始 [SQL Server] 時,最佳選擇通常是選取 [使用此安全性內容] ,然後提供所需的認證在連結的伺服器進行驗證。

    本機登入
    指定可以連接到連結伺服器的本機登入。 本機登入可以是使用 SQL Server 驗證或 Windows 驗證的方式。 使用這份清單可限制與特定登入的連接,或允許某些登入連接成不同的登入。

    冒充
    將使用者名稱和密碼從本機登入傳送給連結伺服器。 針對 SQL Server 驗證,遠端伺服器上必須有具有相同名稱和密碼的登入。 若為 Windows 登入,則登入必須是連結伺服器上的有效登入。

    若要使用模擬身份,則組態必須符合委派需求。

    遠端使用者
    使用遠端用戶對應本機 登入中未定義的使用者。 遠端用戶必須是遠端伺服器上的 SQL Server 驗證登入。

    遠端密碼
    指定遠端使用者的密碼。

    新增
    新增本機登入。

    移除
    拿掉現有的本機登入。

    未製作
    指定不會針對清單中未定義的登入建立連接。

    不使用安全性內容進行建立
    指定將建立連接,而不需針對清單中未定義的登入使用安全性內容。

    使用登入當前的安全性上下文進行建立
    針對清單中未定義的登入,指定使用登入的目前安全性內容來建立連接。 如果使用 Windows 驗證連線到本地伺服器,您的 Windows 認證將會用來連線到遠端伺服器。 如果使用 SQL Server 驗證連線到本機伺服器,則會使用登入名稱和密碼來連線到遠端伺服器。 在此情況下,遠端伺服器上必須存在具有相同名稱和密碼的登入。

    使用此安全性內容建立
    指定將會使用 [ 遠端登入 ] 和 [ 使用 密碼] 方塊中所指定的登入和密碼來建立連線,以用於清單中未定義的登入。 遠端登入必須是遠端伺服器上的 SQL Server 驗證登入。

  5. 或者,若要檢視或指定伺服器選項,請按兩下 [ 伺服器選項 ] 頁面。

    定序相容
    影響針對連結伺服器的分散式查詢執行。 如果此選項設為 True,SQL Server 假設連結伺服器中的所有字元在字元集和定序序列 (或排序次序) 方面都與本機伺服器相容。 這使 SQL Server 能夠將字元資料行的比較傳送給提供者。 如果未設定此選項,SQL Server 一律會在本機執行字元欄位的比較。

    只有在確定對應至連結伺服器的數據源與本地伺服器具有相同的字元集和排序順序時,才應該設定此選項。

    數據存取
    啟用和停用連結伺服器的分散式查詢存取。

    RPC
    從指定的伺服器啟用 RPC。

    RPC 輸出
    啟用對指定伺服器的 RPC。

    使用遠端定序
    決定將使用遠端資料行或本機伺服器的定序。

    如果為 True,即會針對 SQL Server 資料來源使用遠端資料行的定序,並針對非 SQL Server 資料來源使用定序名稱中指定的定序。

    如果為 False,分散式查詢一律會使用本機伺服器的預設定序,而定序名稱與遠端資料行的定序則會被忽略。 默認值為 false。

    定序名稱
    如果使用遠端定序為 true,且數據源不是 SQL Server 數據源,則指定遠端數據來源所使用的定序名稱。 名稱必須是 SQL Server 所支援的定序之一。

    在存取 OLE DB 資料來源時,如果不是 SQL Server,但其定序與某個 SQL Server 定序相符,請使用此選項。

    連結伺服器必須支援一個單一的排序規則,供伺服器中的所有資料行使用。 如果連結的伺服器支援單一數據源內的多個定序,或無法判斷連結伺服器的定序符合其中一個 SQL Server 定序,則請勿設定此選項。

    連接逾時
    連接到連結伺服器的逾時值 (以秒為單位)。

    如果為 0,請使用 sp_configure 預設 遠端登錄逾時 選項值。

    查詢逾時
    針對連結伺服器進行查詢的逾時值 (以秒為單位)。

    如果為 0,請使用 sp_configure 預設 遠端查詢逾時 選項值。

    啟用分散式交易的促進
    使用此選項,透過 Microsoft 分散式交易協調器 (MS DTC) 交易,保護伺服器對伺服器程序的動作。 此選項為 TRUE 時,呼叫遠端預存程序就會啟動分散式交易,而且會利用 MS DTC 來編列這項交易。 如需詳細資訊,請參閱 sp_serveroption (Transact-SQL)

  6. 按一下 [確定]

檢視提供者選項
  • 若要檢視提供者提供的選項,請按兩下 [ 提供者選項 ] 頁面。

    所有提供者都沒有相同的可用選項。 例如,某些資料類型有索引可用,而某些可能沒有。 使用此對話方塊來協助 SQL Server 了解提供者的功能。 SQL Server 會安裝某些常見的資料提供者,不過,當提供資料的產品變更時,SQL Server 所安裝的提供者不一定支援所有最新功能。 提供資料之產品功能的最佳資源來源是該產品的說明文件。

    動態參數
    表示提供者允許在參數化查詢時使用 '?' 參數標記語法。 這個選項只有在提供者支援 IcommandWithParameters 介面,並支援 '?' 作為參數標記時才能設定。 設定此選項可讓 SQL Server 針對提供者執行參數化查詢。 針對提供者執行參數化查詢的能力,對於某些查詢而言可以達到較佳的效能。

    巢狀查詢
    表示該提供者允許 FROM 子句中使用巢狀 SELECT 陳述式。 設定此選項可讓 SQL Server 向需要在 FROM 子句中巢狀處理 SELECT 陳述式的提供者委派特定查詢。

    僅限零級
    只會針對提供者叫用層級 0 的 OLE DB 介面。

    允許內部處理
    SQL Server 允許將提供者具現化為同處理序伺服程式。 未設定此選項時,預設行為是具現化 SQL Server 進程外部的提供者。 在 SQL Server 處理序以外將提供者具現化,可防止 SQL Server 處理序在提供者中產生錯誤。 當提供者在 SQL Server 程序外部具現化時,不允許更新或插入參考長欄 (textntextimage)。

    非交易更新
    SQL Server 允許更新,即使 ITransactionLocal 無法使用也一樣。 如果啟用此選項,則無法復原提供者的更新,因為提供者不支援交易。

    索引為存取路徑
    SQL Server 會嘗試使用提供者的索引來擷取資料。 預設情況下,索引僅用於中繼資料,從不會開啟。

    不允許特定存取
    SQL Server 不允許透過對 OLE DB 提供者的 OPENROWSET 和 OPENDATASOURCE 函式進行臨機作存取。 如果未設定此選項,SQL Server 也不允許臨機作存取。

    支援「Like」運算符號
    表示該提供者支援使用 LIKE 關鍵字的查詢。

使用 Transact-SQL

若要使用 Transact-SQL 建立連結的伺服器,請使用 sp_addlinkedserver (Transact-SQL)CREATE LOGIN (Transact-SQL)sp_addlinkedsrvlogin (Transact-SQL) 語句。

若要將鏈接伺服器建立至另一個 SQL Server 實例,請使用 Transact-SQL
  1. 在查詢編輯器中,輸入下列 Transact-SQL 命令以連結到名為 SRVR002\ACCTG 的 SQL Server 執行個體:

    USE [master]  
    GO  
    EXEC master.dbo.sp_addlinkedserver   
        @server = N'SRVR002\ACCTG',   
        @srvproduct=N'SQL Server' ;  
    GO  
    
    
  2. 執行下列程式碼,以設定連結伺服器使用登入該伺服器的網域憑證。

    EXEC master.dbo.sp_addlinkedsrvlogin   
        @rmtsrvname = N'SRVR002\ACCTG',   
        @locallogin = NULL ,   
        @useself = N'True' ;  
    GO  
    
    

後續步驟:建置連接伺服器後採取的步驟

測試已連接的伺服器

  • 執行下列程式代碼來測試連結伺服器的連線。 這個範例會傳回連結伺服器上的資料庫名稱。

    SELECT name FROM [SRVR002\ACCTG].master.sys.databases ;  
    GO  
    
    

撰寫從連結伺服器聯結數據表的查詢

  • 使用四部分的名稱來表示連結之伺服器上的物件。 執行下列程式碼以傳回本機伺服器上的所有登入清單,及其連結之伺服器上相符的登入。

    SELECT local.name AS LocalLogins, linked.name AS LinkedLogins  
    FROM master.sys.server_principals AS local  
    LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked  
        ON local.name = linked.name ;  
    GO  
    

    當連結的伺服器登入傳回NULL時,表示連結的伺服器上沒有登入。 除非連結伺服器設定為傳遞不同的安全性內容或接受匿名連線,否則這些登入將無法使用連結伺服器。

另請參閱

連結的伺服器 (Database Engine)
sp_addlinkedserver (Transact-SQL)
sp_serveroption (Transact-SQL)