sp_addlinkedserver是sqlserver中用於跨數據庫操作.該函數用於創建一個連接.在開發中遇到業務需求, 需要創建一個存儲過程,在裏面做跨數據庫操作.該存儲過程創建語句如下
--- 創建存儲過程begin
if object_id('SYNC_MIDDLE') is not null
drop proc SYNC_MIDDLE
go
CREATE PROCEDURE SYNC_MIDDLE
@middleIp NVARCHAR(50), --需要連接的數據庫id
@middleAcc NVARCHAR(50), --需要連接的數據庫登陸賬號
@middlePsd NVARCHAR(50) --需要連接的數據庫登陸密碼
AS
BEGIN
if exists(select * from sys.servers where name = 'sync_middle_server')
BEGIN
--如果原先有連接,就先刪掉原來的
Exec sp_droplinkedsrvlogin 'sync_middle_server',Null
Exec sp_dropserver 'sync_middle_server'
print '刪除連接:sync_middle_server'
END
--使用sp_addlinkedserver來增加鏈接
EXEC sp_addlinkedserver
@server='sync_middle_server',--別名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@middleIp --要訪問的服務器ip
--使用sp_addlinkedsrvlogin 來增加用戶登錄鏈接
EXEC sp_addlinkedsrvlogin
'sync_middle_server', --別名
'false',
NULL,
@middleAcc, --帳號
@middlePsd --密碼
-- 跨數據庫查詢其 s_user 表
select id,name from [sync_middle_server].[MYDB].dbo.s_user
-- 其他業務操作....
END
GO
--- 創建存儲過程end
但是在執行以上語句創建存儲過程時, 語法會去檢查當前是否有 sync_middle_server 這一連接, 沒有則會直接報錯.
故在創建存儲過程前.先創建好對應別名的連接sync_middle_server, 先直接執行以下語句.
然後使用 select * from sys.servers; 查詢確認下是否已創建好
--使用sp_addlinkedserver來增加鏈接
EXEC sp_addlinkedserver
@server='sync_middle_server',--別名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.0.11' --要訪問的服務器ip
--使用sp_addlinkedsrvlogin 來增加用戶登錄鏈接
EXEC sp_addlinkedsrvlogin
'sync_middle_server', --別名
'false',
NULL,
'admin', --帳號
'123456' --密碼
這樣就可以創建好存儲過程了.後面調用其時也不會出現連接不存在的問題
關於 sp_addlinkedserver 和 sp_addlinkedsrvlogin 使用方法,不在本文累贅
本文到此結束.