遠程執行SQL或遠程調用存儲過程

    --遠程鏈接
     if ( not exists(select * from sys.servers where name='remotedb'))
     begin
		EXEC   sp_addlinkedserver        
		   @server='remotedb',--被訪問的服務器別名         
		   @srvproduct='',        
		   @provider='SQLOLEDB',       
		   @datasrc='192.168.0.153'   --要訪問的服務器 
	end
     EXEC sp_addlinkedsrvlogin  --登陸映射      
     'remotedb', --被訪問的服務器別名       
     'false',        
     NULL,        
     'sa', --賬號       
     '123456' --密碼 
    --使用:<span style="color:#000000;">若使用過程當中,提示找不到remotedb,多是由於在sql cmd窗口執行的時序問題,能夠在登陸映射完了後,加一條go語句
</span>     select * from remotedb.mydb.dbo.tablename  
    exec remotedb.mydb.dbo.ProcedureName
  --刪除登陸映射和服務器映射

    Exec sp_droplinkedsrvlogin remotedb,Null       --刪除映射(錄與連接服務器上遠程登陸之間的映射)

    Exec sp_dropserver  remotedb                    --刪除遠程服務器連接

如下附上sp_addlinkedserver   和sp_addlinkedsrvlogin   的參數說明sql

sp_addlinkedserver

建立一個連接的服務器,使其容許對分佈式的、針對 OLE DB 數據源的異類查詢進行訪問。在使用 sp_addlinkedserver 建立連接的服務器以後,此服務器就能夠執行分佈式查詢。若是連接服務器定義爲 Microsoft® SQL Server™,則可執行遠程存儲過程。數據庫

語法

sp_addlinkedserver安全

 [ @server'server'
    
@srvproduct = 'product_name]
    @provider'provider_name']
    @datasrc = 'data_source']
    @location'location']
    @provstr = 'provider_string']
    @catalog = 'catalog']服務器

參數

@server = 'server'分佈式

要建立的連接服務器的本地名稱,server 的數據類型爲 sysname,沒有默認設置。ide

若是有多個 SQL Server 實例,server 能夠爲 servername\instancename。此連接的服務器可能會被引用爲下面示例的數據源:spa

@srvproduct = 'product_name'.net

要添加爲連接服務器的 OLE DB 數據源的產品名稱。product_name 的數據類型爲 nvarchar(128),默認設置爲 NULL。若是是 SQL Server,則不須要指定 provider_namedata_sourcelocationprovider_string 以及目錄。code

@provider = 'provider_name'orm

與此數據源相對應的 OLE DB 提供程序的惟一程序標識符 (PROGID)。provider_name 對於安裝在當前計算機上指定的 OLE DB 提供程序必須是惟一的。provider_name的數據類型爲nvarchar(128),默認設置爲 NULL。OLE DB 提供程序應該用給定的 PROGID 在註冊表中註冊。

@datasrc = 'data_source'

由 OLE DB 提供程序解釋的數據源名稱。data_source 的數據類型爲 nvarchar(4000),默認設置爲 NULL。data_source被看成 DBPROP_INIT_DATASOURCE 屬性傳遞以便初始化 OLE DB 提供程序。

當連接的服務器針對於 SQL Server OLE DB 提供程序建立時,能夠按照 servername\instancename 的形式指定data_source,它能夠用來鏈接到運行於特定計算機上的 SQL Server 的特定實例上。servername 是運行 SQL Server 的計算機名稱,instancename 是用戶將被鏈接到的特定 SQL Server 實例的名稱。

@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 做爲 DBPROP_INIT_PROVIDERSTRING 屬性傳遞以便初始化 OLE DB 提供程序。

當針對 Server OLE DB 提供程序提供了連接服務器後,可將 SERVER 關鍵字用做 SERVER=servername\instancename 來指定實例,以指定特定的 SQL Server 實例。servername 是 SQL Server 在其上運行的計算機名稱,instancename 是用戶鏈接到的特定的 SQL Server 實例名稱。

@catalog = 'catalog'

創建 OLE DB 提供程序的鏈接時所使用的目錄。catalog 的數據類型爲sysname,默認設置爲 NULL。catalog做爲 DBPROP_INIT_CATALOG 屬性傳遞以便初始化 OLE DB 提供程序。

 

sp_addlinkedsrvlogin

建立或更新本地 Microsoft® SQL Server™ 實例上的登陸與連接服務器上遠程登陸之間的映射。

語法

sp_addlinkedsrvlogin [ @rmtsrvname = ]'rmtsrvname'
    @useself = 'useself']
    
[ , [ @locallogin = 'locallogin']
    @rmtuser = 'rmtuser']
    
@rmtpassword = 'rmtpassword]

參數

[@rmtsrvname ='rmtsrvname'

是應用登陸映射的連接服務器名稱。rmtsrvname 的數據類型爲 sysname,沒有默認設置。

[@useself ='useself'

決定用於鏈接到遠程服務器的登陸名稱。useself 的數據類型爲 varchar(8),默認設置爲 TRUE。true 值指定 SQL Server 驗證的登陸使用其本身的憑據以鏈接到rmtsrvname,而忽略 rmtuser 和 rmtpassword 參數。false 值指定rmtuser 和 rmtpassword 參數用來鏈接到特定 locallogin 的 rmtsrvname。若是rmtuser 和 rmtpassword 也設置爲 NULL,則鏈接連接服務器不需使用任何登陸或密碼。對於 Windows NT 身份驗證登陸而言,useself爲 true 則無效,除非 Microsoft Windows NT® 環境支持安全賬戶委託,而且,提供程序支持 Windows 身份驗證(此時再也不須要建立值爲true 的映射,不過建立仍然有效)。

@locallogin ='locallogin'

本地服務器上的登陸。locallogin 的數據類型爲 sysname,默認設置爲 NULL。NULL 值指定此條目將應用於全部鏈接到rmtsrvname 的本地登陸。若是值不爲 NULL,則 locallogin 能夠是一個 SQL Server 登陸或 Windows NT 用戶。必須授予 Windows NT 用戶直接訪問 SQL Server 或經過其做爲已授予訪問權限的組的成員來訪問 SQL Server 的權限。

[@rmtuser ='rmtuser'

當 useself 爲 false 時,用來鏈接 rmtsrvname的用戶名,rmtuser 的數據類型爲 sysname,默認設置爲 NULL。

[@rmtpassword ='rmtpassword'

與 rmtuser 相關的密碼。rmtpassword 的數據類型爲 sysname,默認設置爲 NULL。

返回代碼值

0(成功)或 1(失敗)

相關文章
相關標籤/搜索