遠端執行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']
[ ,
[ , [ @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_name、data_source、location、provider_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,而忽略 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(失敗)