我們在使用SQL Server時,有時會有這種需求,需要從一個SQL Server服務器A中,查詢另一個SQL Server服務器B中的表,然后將SQL Server服務器A中的表和SQL Server服務器B中的表進行JOIN,像類似這種跨SQL Server服務器的SQL語句操作,我們就可以通過在SQL Server中建立Linked Servers來實現。
可以通過下面兩篇微軟的官方文檔,來了解如何在SQL Server中建立Linked Servers:
Linked Servers (Database Engine)
Create Linked Servers (SQL Server Database Engine)
注意文章中這里有提到,如果建立Linked Server的遠程數據庫也是SQL Server(Linked Servers不光可以建立到SQL Server的遠程連接,還可以建立到其它類型數據庫,例如Oracle的遠程連接),那么我們可以通過Linked Server來調用遠程SQL Server數據庫中的存儲過程:
If the linked server is defined as an instance of SQL Server, remote stored procedures can be executed.
文章中這里有提到,訪問Linked Server中遠程數據庫對象的格式如下,由四部分組成:
linked_server_name.catalog.schema.object_name
其中:
- linked_server_name是定義的Linked Server名稱
- catalog是遠程數據庫的名字
- schema是遠程數據庫中的架構名
- object_name是遠程數據庫中的對象名,如:表名,視圖名,存儲過程名等
其實在SQL Server Management Studio(SSMS)中建立Linked Server時,在General選項卡中,最重要的就是填寫下面幾個參數:
- Linked server:Linked Server的名稱
- Provider:遠程數據庫類型的提供程序
- Data source:遠程數據庫服務器的名稱或者IP地址
- Catalog:遠程數據庫的名字
然后在Security選項卡,輸入登錄遠程數據庫的用戶名和密碼:
最后需要注意,在Server Options選項卡上,我們要設置RPC和RPC Out兩個選項為True,這樣可以避免很多問題:
這樣就使用SSMS建立好一個Linked Server了:
建立好Linked Server之后,我們還可以對遠程數據庫中的對象定義同義詞(synonym),通過同義詞(synonym)來簡化使用Linked Server名稱訪問遠程數據庫對象,詳情查看: