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

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

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

![先開啟 Microsoft SQL Server Management Studio 工具，找到「伺服器物件」下的「連結的伺服器」，按滑鼠右鍵選「新增連結的伺服器(N)...」選項。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2e740dd013bca3ad09c8-image_3.png)

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

![新增連結的伺服器 / 一般頁籤](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ef2fe8feba12016568be-image_15.png)

底下是各欄位的說明，部分是從 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):」的「遠端登入」(帳號) 以及「指定密碼」即可。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/933675068a2de10191dc-image_14.png)

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

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

![若你用的是 SQL Server 2005 且更新到 Service Pack 2 的話，您就可以透過 GUI 介面測試是否能連接到連結伺服器。你可以在 \[物件總管\] 中，以滑鼠右鍵按一下連結伺服器，然後按一下 \[測試連接\]。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ab6ed8ca739b4ce9d07d-image_13.png)

若連接成功，會得到以下畫面：

![連結的伺服器 (Linked Server) 連接成功](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e5eb01539b44566405dd-image_12.png)

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

 ![如果連接失敗也會得到錯誤訊息，不過回應的訊息也可能是由遠端伺服器傳過來的，所以訊息描述的清楚與否取決於遠端回傳的資料說明詳細與否。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/43c413dd967234e1ffa9-image_21.png)

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

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

![那如果要下 T-SQL 查詢連結的伺服器中資料庫的資料，就可以用以下語法直接查詢：](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/166fca99b3ca577d1b80-image_24.png)

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

-   [Linked Servers on MS SQL: Part 1](https://www.databasejournal.com/ms-sql/linked-servers-on-ms-sql-part-1/)
-   [Linked Servers on MS SQL: Part 2](https://www.databasejournal.com/ms-sql/linked-servers-on-ms-sql-part-2/)
-   [How to setup linked servers for SQL Server and Oracle 64 bit client](http://www.mssqltips.com/tip.asp?tip=1433)
-   [How to link different data sources together](http://www.codeproject.com/KB/database/LikeDataStores.aspx)

**其他相關連結**

-   [OPENQUERY (Transact-SQL)](http://msdn.microsoft.com/en-us/library/ms188427.aspx)
-   [Migrate MySQL to Microsoft SQL Server](http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx)
-   [兩個Oracle Linked Server與SQL間資料移轉問題](http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/09/03/two-oracle-linked-server-tips.aspx)
