使用sp_addlinkedserver、sp_dropserver 、sp_addlinkedsrvlogin和sp_droplinkedsrvlogin 遠程查詢數據


一、sp_addlinkedserver 

創建鏈接服務器。 鏈接服務器讓用戶可以對 OLE DB 數據源進行分布式異類查詢。 在使用 sp_addlinkedserver 創建鏈接服務器后,可對該服務器運行分布式查詢。 如果鏈接服務器定義為 SQL Server 實例,則可執行遠程存儲過程。

1、語法:

sp_addlinkedserver [ @server= ] 'server'
    [ , [ @srvproduct= ] 'product_name' ]
    [ , [ @provider= ] 'provider_name' ]
    [ , [ @datasrc= ] 'data_source' ]
    [ , [ @location= ] 'location' ]
    [ , [ @provstr= ] 'provider_string' ]
    [ , [ @catalog= ] 'catalog' ]

2、參數:

@server= ] 'server'

要創建的鏈接服務器的名稱。 server 的數據類型為 sysname,無默認值。

@srvproduct= ] 'product_name'

要添加為鏈接服務器的 OLE DB 數據源的產品名稱。 product_name 的數據類型為 nvarchar(128),默認值為 NULL。 如果為 SQL Server,則不必指定provider_namedata_sourcelocationprovider_string 和 catalog

@provider= ] 'provider_name'

與此數據源對應的 OLE DB 訪問接口的唯一編程標識符 (PROGID)。 對於當前計算機中安裝的指定 OLE DB 訪問接口,provider_name 必須唯一。 provider_name 的數據類型為nvarchar(128),默認值為 NULL;但如果忽略 provider_name,則使用 SQLNCLI。 (使用 SQLNCLI 並且 SQL Server 將重定向到 SQL Server Native Client OLE DB 訪問接口的最新版本。)OLE DB 訪問接口應以指定的 PROGID 在注冊表中注冊。

@datasrc= ] 'data_source'

由 OLE DB 訪問接口解釋的數據源的名稱。 data_source 的數據類型為 nvarchar(4000) data_source 作為 DBPROP_INIT_DATASOURCE 屬性傳遞以初始化 OLE DB 訪問接口。

@location= ] 'location'

由 OLE DB 訪問接口解釋的數據庫的位置。 location 的數據類型為 nvarchar(4000),默認值為 NULL。 location 作為 DBPROP_INIT_LOCATION 屬性傳遞以初始化 OLE DB 訪問接口。

@provstr= ] 'provider_string'

OLE DB 訪問接口特定的連接字符串,它可標識唯一的數據源。 provider_string 的數據類型為 nvarchar(4000),默認值為 NULL。 provstr 或傳遞給 IDataInitialize 或設置為 DBPROP_INIT_PROVIDERSTRING 屬性,以初始化 OLE DB 訪問接口。

當針對 SQL Server Native Client OLE DB 訪問接口創建鏈接服務器時,可以使用 SERVER 關鍵字來指定實例,即使用 SERVER=servername\instancename 指定特定 SQL Server 實例。 servername 是運行 SQL Server 的計算機的名稱,instancename 是用戶要連接的特定 SQL Server 實例的名稱。

注意 注意

若要訪問鏡像數據庫,則連接字符串必須包含數據庫名稱。 該名稱是數據訪問接口啟用故障轉移嘗試所必需的。 可以在 @provstr 或 @catalog 參數中指定數據庫。 此外,連接字符串還可以提供故障轉移伙伴名稱。

@catalog= ] 'catalog'

與 OLE DB 訪問接口建立連接時所使用的目錄。 catalog 的數據類型為 sysname,默認值為 NULL。 catalog 作為 DBPROP_INIT_CATALOG 屬性傳遞以初始化 OLE DB 訪問接口。 在針對 SQL Server 實例定義鏈接服務器時,目錄指向鏈接服務器映射到的默認數據庫。

3、返回代碼值:0(成功)或 1(失敗)

詳細參考:http://technet.microsoft.com/zh-cn/library/ms190479.aspx

二、sp_addlinkedsrvlogin

創建或更新 SQL Server 本地實例上的登錄名與遠程服務器中安全帳戶之間的映射。

1、語法:

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ] 

2、參數:

[ @rmtsrvname = ] 'rmtsrvname'

  應用登錄映射的鏈接服務器的名稱。 rmtsrvname 的數據類型為 sysname,無默認值。

[ @useself = ] 'TRUE' | 'FALSE' | 'NULL'

  確定是否通過模擬本地登錄名或顯式提交登錄名和密碼來連接到 rmtsrvname數據類型為 varchar(8),默認值為 TRUE。

  值為 TRUE 指定登錄名使用自己的憑據連接到 rmtsrvname,而忽略 rmtuserrmtpassword 參數。 FALSE 指定 rmtuserrmtpassword 參數用於連接到指定 locallogin 的    rmtsrvname 如果 rmtuserrmtpassword 也設置為 NULL,則不使用登錄名或密碼來連接鏈接服務器。

[ @locallogin = ] 'locallogin'

  本地服務器上的登錄。 locallogin 的數據類型為 sysname,默認值為 NULL。 NULL 指定此項應用於連接到 rmtsrvname 的所有本地登錄。 如果不為 NULL,則 locallogin 可以是 SQL   Server 登錄或 Windows 登錄。 對於 Windows 登錄來說,必須以直接的方式或通過已被授權訪問的 Windows 組成員身份授予其訪問 SQL Server 的權限。

[ @rmtuser = ] 'rmtuser'

  當 @useself 為 FALSE 時,用於連接到 rmtsrvname 的遠程登錄名。 當遠程服務器是不使用 Windows 身份驗證的 SQL Server 實例時,rmtuser 是一個 SQL Server 登錄名。    rmtuser 的數據類型為 sysname,默認值為 NULL。

[ @rmtpassword = ] 'rmtpassword'

  與 rmtuser 關聯的密碼。 rmtpassword 的數據類型為 sysname,默認值為 NULL。

3、返回代碼值:0(成功)或 1(失敗)

詳細參考:http://technet.microsoft.com/zh-cn/library/ms189811.aspx

三、sp_droplinkedsrvlogin

刪除運行 SQL Server 的本地服務器上的登錄與鏈接服務器上的登錄之間的現有映射。 

1、語法:

sp_droplinkedsrvlogin [ @rmtsrvname= ] 'rmtsrvname' , 
   [ @locallogin= ] 'locallogin'

2、參數:

[ @rmtsrvname = ] ' rmtsrvname '

應用 SQL Server 登錄映射的鏈接服務器名稱。rmtsrvname 的數據類型為 sysname,無默認值。 rmtsrvname 必須已存在。

[ @locallogin = ] ' locallogin '

本地服務器上的 SQL Server 登錄,它具有到鏈接服務器 rmtsrvname 的映射。locallogin 的數據類型為 sysname,無默認值。 localloginrmtsrvname 的映射必須已經存在。 如果為 NULL,則刪除 sp_addlinkedserver 創建的默認映射(該映射將本地服務器上的所有登錄映射到鏈接服務器上的登錄)。

3、返回代碼值:0(成功)或 1(失敗)

詳細參考:http://technet.microsoft.com/zh-cn/library/ms186218.aspx

四、sp_dropserver

從本地 SQL Server 實例中的已知遠程服務器和鏈接服務器的列表中刪除服務器。

1、語法:

sp_dropserver [ @server = ] 'server' 
     [ , [ @droplogins = ] { 'droplogins' | NULL} ]

2、參數:

@server = 'server'

要刪除的服務器。 server 的數據類型為 sysname,無默認值。 server 必須存在。

@droplogins = 'droplogins' | NULL

指示如果指定了 droplogins,那么對於 server,還必須刪除相關的遠程服務器和鏈接服務器登錄名。 @droplogins 的數據類型為 char(10),默認值為 NULL。

3、返回代碼值:0(成功)或 1(失敗)

詳細參考:http://technet.microsoft.com/zh-cn/library/ms174310.aspx

示例:

--創建遠程鏈接服務器
execute sys.sp_addlinkedserver @server='otherServer',    --被訪問的服務器別名
        @srvproduct='',
        @provider='SQLOLEDB',
        @datasrc='192.168.1.3,1466\SFKLPOS\MSSQL2008'    --被訪問的服務器地址(IP地址,端口號\服務器名稱)
--創建本地用戶與遠程服務器中用戶之間的映射
execute sys.sp_addlinkedsrvlogin @rmtsrvname='otherServer',    --被訪問的服務器別名
        @useself='false',    --是否通過模擬本地登錄名或顯式提交登錄名和密碼來連接到遠程服務器
        @locallogin=null,    --本地登錄
        @rmtuser='sa',    --用戶名
        @rmtpassword='sa123456'    --密碼
go
    
--建立完成之后就可以正常使用了 
select * from otherServer.NewPosData.dbo.Site_ProductMap    --連接服務器別名.數據庫名稱.dbo.表名稱
go

--刪除運行本地與遠程之間的用戶映射
execute sys.sp_droplinkedsrvlogin @rmtsrvname='otherServer',@locallogin=null
--刪除鏈接服務器
execute sys.sp_dropserver @server='otherServer',@droplogins='droplogins'
go

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM