The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 SQL 2005 中設定連結的伺服器(Linked Server)

今天在嘗試設定 SQLEXPRESS 中的「連結的伺服器(Linked Server)」功能,不知道是 Management Studio 翻譯的不清楚還是怎樣,試了好多次才成功,以下是我設定「連結的伺服器」的心得。

先開啟 Microsoft SQL Server Management Studio 工具,找到「伺服器物件」下的「連結的伺服器」,按滑鼠右鍵選「新增連結的伺服器(N)...」選項。

先開啟 Microsoft SQL Server Management Studio 工具,找到「伺服器物件」下的「連結的伺服器」,按滑鼠右鍵選「新增連結的伺服器(N)...」選項。

然後這頁就是重點了,讓我試了好幾次才成功的,即便我按了 F1 看線上說明我還是看不懂應該怎麼輸入。

新增連結的伺服器 / 一般頁籤

底下是各欄位的說明,部分是從 SQL Server 2005 線上叢書摘錄下來的,並另外加上我個人的說明:

  • 連結的伺服器
    • 提供用來參考此連結之伺服器的名稱。
    • 為此「連結的伺服器」設定一個名稱,未來可以在 T-SQL 的時候使用。
  • SQL Server
    • 將連結的伺服器識別為 Microsoft SQL Server 的執行個體。如果您使用這個定義 SQL Server 連結之伺服器的方法,[連結的伺服器] 中所指定的名稱就必須是伺服器的網路名稱。另外,從伺服器擷取的任何資料表,都會是來自已連結伺服器上之登入所定義的預設資料庫。
  • 其他資料來源
    • 指定 SQL Server 以外的 OLE DB 伺服器。按一下這個選項會啟動在它下面的選項。
  • 提供者
    • 從清單方塊中選取 OLE DB 資料來源。在登錄中,OLE DB 提供者是使用給定的 PROGID 註冊。
    • 如果你要連結到 SQL 2000 的資料庫,可以選擇 Microsoft OLE DB Provider for SQL Server 或是 SQL Native Client
  • 產品名稱
    • 輸入 OLE DB 資料來源的產品名稱,以加入成為連結的伺服器。
    • 隨便輸入一個名字都可以,這是用來辨識來源的資料庫是用何種產品用的,類似註解欄位。
  • 資料來源
    • 依 OLE DB 提供者所解譯的,輸入資料來源的名稱。
    • 這裡可以輸入遠端的 IP 位址(TCP/IP),或輸入具名連線位址(Named Pipe),或輸入檔案的完整路徑(Excel or Access file)。
  • 提供者字串
    • 輸入對應至資料來源之 OLE DB 提供者的唯一程式設計識別碼 (PROGID)。
    • 這就是我看不懂的地方了,其實這裡就是輸入完整的連線字串(Connection String)啦!!
  • 位置
    • 依 OLE DB 提供者的解譯,輸入資料庫的位置。
    • 這我也看不懂,應該是依據不同的 OLE DB 會有不同的用途吧,等以後有用到時在去查及可。
  • 目錄
    • 輸入連接到 OLE DB 提供者時,要使用的目錄名稱。
    • 這裡可以選擇性的輸入「資料庫名稱」,也可以不用輸入,如果你是要連結到 SQL Server,設定這個欄位好像也沒什麼用。

接下來,還要輸入「安全性」頁籤中的登入資訊,比較簡單的作法就是直接設定「使用此安全性內容建立(M):」的「遠端登入」(帳號) 以及「指定密碼」即可。

輸入「安全性」頁籤中的登入資訊,比較簡單的作法就是直接設定「使用此安全性內容建立(M):」的「遠端登入」(帳號) 以及「指定密碼」即可。

之後按下「確定」鍵,如果沒出現錯誤訊息,那就是成功啦。

不過我也發現,當你是使用 SQLEXPRESS 的時候,新增完「連結的伺服器」後,幾乎就沒什麼功能了,無法查看遠端的連結伺服器有什麼資料庫,也無法在新增完「連結的伺服器」後測試連接是否成功。但若你用的是 SQL Server 2005 且更新到 Service Pack 2 的話,您就可以透過 GUI 介面測試是否能連接到連結伺服器。你可以在 [物件總管] 中,以滑鼠右鍵按一下連結伺服器,然後按一下 [測試連接]。

若你用的是 SQL Server 2005 且更新到 Service Pack 2 的話,您就可以透過 GUI 介面測試是否能連接到連結伺服器。你可以在 [物件總管] 中,以滑鼠右鍵按一下連結伺服器,然後按一下 [測試連接]。

若連接成功,會得到以下畫面:

連結的伺服器 (Linked Server) 連接成功

如果連接失敗也會得到錯誤訊息,不過回應的訊息也可能是由遠端伺服器傳過來的,所以訊息描述的清楚與否取決於遠端回傳的資料說明詳細與否。

 如果連接失敗也會得到錯誤訊息,不過回應的訊息也可能是由遠端伺服器傳過來的,所以訊息描述的清楚與否取決於遠端回傳的資料說明詳細與否。

那如果要下 T-SQL 查詢連結的伺服器中資料庫的資料,就可以用以下語法直接查詢:

-- TEST 代表「連結的伺服器」
-- Northwind 代表「連結的伺服器中的資料庫名稱」
-- dbo 代表「連結的伺服器中的資料庫的結構描述」
-- Categories 代表「連結的伺服器中的資料庫中的表格名稱」
select * from TEST.Northwind.dbo.Categories

那如果要下 T-SQL 查詢連結的伺服器中資料庫的資料,就可以用以下語法直接查詢:

如果你要連接到不同類型的資料庫或檔案,可以參考以下連結:

其他相關連結