兩種方式建立sqlserver連結伺服器

天府雲創發表於2018-06-04

建立連結伺服器(SQL Server 資料庫引擎)

    本主題說明如何通過使用 SQL Server 或 SQL Server Management Studio 建立連結伺服器和訪問來自其他Transact-SQL的資料。 通過建立連結伺服器,您可以使用來自多個資料來源的資料。 該連結伺服器不必是其他SQL Server例項,儘管這種情況很常見。


背景

連結伺服器讓使用者可以對 OLE DB 資料來源進行分散式異類查詢。 在建立某一連結伺服器後,可對該伺服器執行分散式查詢,並且查詢可以聯接來自多個資料來源的表。 如果連結伺服器定義為 SQL Server例項,則可執行遠端儲存過程。

連結伺服器的功能和必需的引數可能會有很大差異。 本主題中的示例是典型示例,但並未描述所有選項。 有關詳細資訊,請參閱 sp_addlinkedserver (Transact-SQL)的資料。

安全性

許可權

在使用 Transact-SQL 語句時,需要具有 ALTER ANY LINKED SERVER 許可權,或需要具有 setupadmin 固定伺服器角色中的成員資格。 使用 Management Studio 時,要求具有 CONTROL SERVER 許可權,或者具有sysadmin 固定伺服器角色的成員身份。

如何建立連結伺服器

您可以使用以下任意一項:

使用 SQL Server Management Studio

使用 SQL Server Management Studio 建立與其他 SQL Server 例項的連結伺服器
  1. 在 SQL Server Management Studio中,開啟物件資源管理器,展開 “伺服器物件”,右鍵單擊 “連結伺服器”,然後單擊 “新建連結伺服器”

  2. 在 “常規” 頁上的 “連結伺服器” 框中,鍵入您連結到的 SQL Server 例項的名稱。

    SQL Server
    將連結伺服器標識為 Microsoft SQL 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 身份驗證的登入。 使用此列表可以將連線限定為特定的登入,也可以允許某些登入使用其他登入名進行連線。

    Impersonate
    將使用者名稱和密碼從本地登入傳遞到連結伺服器。 對於 SQL Server 身份驗證,具有完全相同的名稱和密碼的登入必須存在於遠端伺服器中。 對於 Windows 登入,登入必須是連結伺服器中的有效登入。

    若要使用模擬功能,配置必須滿足委託的要求。

    遠端使用者
    使用遠端使用者對映 “本地登入” 中未定義的使用者。 “遠端使用者” 必須是遠端伺服器中的 SQL Server 身份驗證登入。

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

    “新增”
    新增新的本地登入。

    刪除
    刪除現有的本地登入。

    不建立連線
    指定不對列表中未定義的登入建立連線。

    不使用安全上下文建立連線
    指定對於列表中未定義的登入,不使用安全上下文建立連線。

    使用登入當前的安全上下文建立連線
    指定對於列表中未定義的登入,使用登入的當前安全上下文建立連線。 如果使用 Windows 身份驗證連線到本地伺服器,則使用 Windows 憑據連線到遠端伺服器。 如果使用 SQL Server 身份驗證連線到本地伺服器,則在連線到遠端伺服器時需要使用登入名和密碼。 在這種情況下,具有完全相同的名稱和密碼的登入必須存在於遠端伺服器中。

    使用此安全上下文建立連線
    指定對於列表中未定義的登入,使用 “遠端登入” 和 “使用密碼” 框中指定的登入名和密碼建立連線。 遠端登入必須是遠端伺服器中的 SQL Server 身份驗證登入。

  5. 或者,若要檢視或指定伺服器選項,請單擊 “伺服器選項” 頁。

    排序規則相容
    影響分散式查詢在連結伺服器上的執行。 如果該選項設定為 true,則 SQL Server 假定連結伺服器中的所有字元在字符集和排序規則(或排序順序)上與本地伺服器相容。 這使 SQL Server 得以將字元列上的比較傳送給提供程式。 如果沒有設定該選項,則 SQL Server 將始終在本地進行字元列上的比較。

    只有在確信連結伺服器所對應的資料來源與本地伺服器有相同的字符集和排序順序時,才應當設定該選項。

    資料訪問
    啟用和禁用連結伺服器以進行分散式查詢訪問。

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

    RPC Out
    對指定的伺服器啟用 RPC。

    使用遠端排序規則
    確定是使用遠端列的排序規則還是使用本地伺服器的排序規則。

    如果為 True,則 SQL Server 資料來源將使用遠端列的排序規則,並且非 SQL Server 資料來源將使用排序規則名稱指定的排序規則。

    如果為 False,則分散式查詢將始終使用本地伺服器的預設排序規則,而排序規則名稱和遠端列的排序規則將被忽略。 預設值為 False。

    排序規則名稱
    如果“使用遠端排序規則”為 True,並且資料來源不是 SQL Server 資料來源,則指定遠端資料來源使用的排序規則名稱。 此名稱必須是 SQL Server支援的排序規則之一。

    如果訪問的是 SQL Server以外的 OLE DB 資料來源,但該資料來源的排序規則與 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 程式外例項化訪問介面時,不允許更新或插入長的引用列(text、 ntextimage)。

    非事務更新
    SQL Server 允許更新,即使 ITransactionLocal 不可用時也是如此。 如果啟用此選項,對訪問介面的更新將不可恢復,因為該訪問介面不支援事務。

    作為訪問路徑的索引
    SQL Server 嘗試使用訪問介面的索引來提取資料。 預設情況下,索引只能用於後設資料而且從不開啟。

    禁止即席訪問
    SQL Server 不允許通過 OPENROWSET 和 OPENDATASOURCE 函式對 OLE DB 訪問介面進行即席訪問。如果未設定此選項,則 SQL Server 同樣不允許進行即席訪問。

    支援 "Like" 運算子
    指示訪問介面支援使用 LIKE 關鍵字的查詢。

使用 Transact-SQL

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

使用 Transact-SQL 建立與其他 SQL Server 例項的連結伺服器
  1. 在查詢編輯器中,輸入以下 Transact-SQL 命令以便連結到名為 SQL Server 的 SRVR002\ACCTG例項:

    SQL複製
    USE [master]  
    GO  
    EXEC master.dbo.sp_addlinkedserver   
        @server = N'SRVR002\ACCTG',   
        @srvproduct=N'SQL Server' ;  
    GO  
    
  2. 執行以下程式碼,以便將連結伺服器配置為使用正在使用連結伺服器的登入名的域憑據。

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

跟進:在建立連結伺服器後採取的步驟

測試連結伺服器

  • 執行下面的程式碼,測試與連結伺服器的連線。 以下示例返回連結伺服器上資料庫的名稱。

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

編寫聯接來自某一連結伺服器的多個表的查詢

  • 使用由四部分組成的名稱引用連結伺服器上的物件。 執行以下程式碼,以便返回本地伺服器上所有登入名的列表及其在連結伺服器上的匹配登入名。

    SQL複製
    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,則意味著該登入名在連結伺服器上不存在。 這些登入名將無法使用連結伺服器,除非連結伺服器配置為傳遞不同的安全上下文或者連結伺服器接受匿名連線。

不同伺服器資料庫之間的資料操作

--建立連結伺服器 
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '遠端伺服器名或ip地址' 
exec sp_addlinkedsrvlogin 'ITSV' , 'false' , null , '使用者名稱' , '密碼' 

--查詢示例 
select * from ITSV.資料庫名.dbo.表名 

--匯入示例 
select * into 表 from ITSV.資料庫名.dbo.表名 

--以後不再使用時刪除連結伺服器 
exec sp_dropserver 'ITSV' , 'droplogins' 

--連線遠端/區域網資料(openrowset/openquery/opendatasource) 
--1、openrowset 

--查詢示例 
select * from openrowset('SQLOLEDB' , 'sql伺服器名' ; '使用者名稱' ; '密碼' , 資料庫名.dbo.表名) 

--生成本地表 
select * into 表 from openrowset('SQLOLEDB' , 'sql伺服器名' ; '使用者名稱' ; '密碼' , 資料庫名.dbo.表名) 

--把本地表匯入遠端表 
insert openrowset( 'SQLOLEDB' , 'sql伺服器名' ; '使用者名稱' ; '密碼' , 資料庫名.dbo.表名) 
select *from 本地表 

--更新本地表 
update b 
set b.列A=a.列A 
from openrowset('SQLOLEDB' , 'sql伺服器名' ; '使用者名稱' ; '密碼' , 資料庫名.dbo.表名) as a inner join 本地表 b 
on a.column1 = b.column1 

--openquery用法需要建立一個連線 

--首先建立一個連線建立連結伺服器 
exec sp_addlinkedserver 'ITSV' , '' , 'SQLOLEDB' , '遠端伺服器名或ip地址' 
--查詢 
select * 
FROM openquery(ITSV , 'SELECT * FROM 資料庫.dbo.表名') 
--把本地表匯入遠端表 
insert openquery(ITSV , 'SELECT * FROM 資料庫.dbo.表名') 
select * from 本地表 
--更新本地表 
update b 
set b.列B=a.列B 
FROM openquery(ITSV , 'SELECT * FROM 資料庫.dbo.表名') as a 
inner join 本地表 b on a.列A=b.列A 

--3、opendatasource/openrowset 
SELECT * 
FROM opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=登陸名 ; Password=密碼').test.dbo.roy_ta 
--把本地表匯入遠端表 
insert opendatasource('SQLOLEDB' , 'Data Source=ip/ServerName ; User ID=登陸名 ; Password=密碼').資料庫.dbo.表名 
select * from 本地表 

sqlserver中建立連結伺服器圖解教程

1.展開伺服器物件-->連結伺服器-->右擊"新建連結伺服器"

 

注意:必須以資料庫管理員身份登入(通常也就是sa帳號)後,才可以建立"連結伺服器"

2.輸入連結伺服器的IP

 

3.設定連結伺服器的安全性

 

完成後,如下圖:

 

現在測試一下,用帳號user本地登入SqlServer,新建一個查詢,輸入Select * From [連結伺服器名].[遠端資料庫名].[所有者].[表名]

比如

Select * from [127.0.0.1].[cntvs].[dbo].[t_class]

沒問題的話,就能查詢到資料了

另請參閱

連結伺服器(資料庫引擎) 
sp_addlinkedserver (Transact-SQL) 
sp_serveroption (Transact-SQL)

連結伺服器(資料庫引擎) | Microsoft Docs https://docs.microsoft.com/zh-cn/sql/relational-databases/linked-servers/linked-servers-database-engine?view=sql-server-2017

系統整合的2種方式 -  https://blog.csdn.net/kyfxbl/article/details/11966195

相關文章