1. 程式人生 > >遠端執行SQL或遠端呼叫儲存過程

遠端執行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' --密碼 
    --使用:若使用過程中,提示找不到remotedb,可能是因為在sql cmd視窗執行的時序問題,可以在登入對映完了後,加一條go語句
select * from remotedb.mydb.dbo.tablename exec remotedb.mydb.dbo.ProcedureName --刪除登入對映和伺服器對映
   Exec sp_droplinkedsrvlogin remotedb,Null       --刪除對映(錄與連結伺服器上遠端登入之間的對映)          
   Exec sp_dropserver  remotedb                    --刪除遠端伺服器連結

以下附上sp_addlinkedserver   和sp_addlinkedsrvlogin   的引數說明

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,沒有預設設定。

如果有多個 SQL Server 例項,server 可以為 servername\instancename。此連結的伺服器可能會被引用為下面示例的資料來源:

[ @srvproduct = ] 'product_name'

要新增為連結伺服器的 OLE DB 資料來源的產品名稱。product_name 的資料型別為 nvarchar(128),預設設定為 NULL。如果是 SQL Server,則不需要指定 provider_namedata_sourcelocationprovider_string 以及目錄。

[ @provider = ] 'provider_name'

與此資料來源相對應的 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,而忽略 rmtuserrmtpassword 引數。false 值指定rmtuserrmtpassword 引數用來連線到特定 localloginrmtsrvname。如果rmtuserrmtpassword 也設定為 NULL,則連線連結伺服器不需使用任何登入或密碼。對於 Windows NT 身份驗證登入而言,useselftrue 則無效,除非 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'

useselffalse 時,用來連線 rmtsrvname的使用者名稱,rmtuser 的資料型別為 sysname,預設設定為 NULL。

[@rmtpassword =] 'rmtpassword'

rmtuser 相關的密碼。rmtpassword 的資料型別為 sysname,預設設定為 NULL。

返回程式碼值

0(成功)或 1(失敗)