sqlserver的sp_addlinkedserver在存儲過程中的使用問題

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 使用方法,不在本文累贅

本文到此結束.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章