通过存储过程SP实现SQL Server链接服务器LinkServer的添加

1. 背景

当系统的微服务化做的不是很高的时候,部分功能要通过DB LinkServer 来实现跨 Server 查询,当然,有时候BI抽数据、DBA数据库维护可能也会创建LinkServer。

特别是当 DB迁移的时候,我们需要检查、创建 DB LinkServer。

 

2.脚本实现

下面是我们创建的一个存储过程,通过这个存储过程来实现简单、快速的添加链接服务器。

 

USE [DBA_Manager]
GO

/****** Object:  StoredProcedure [dbo].[USP_Create_DBLink]    Script Date: 2019/7/5 13:52:50 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER GO


-- =============================================
-- Author:        <Author,Carson> Create date: <Create Date,2018-06-18,> Description:    <Description,实现创建DB LinkServer的脚本化,1)"> =============================================
CREATE PROCEDURE dbo].USP_Create_DBLink] 
     Add the parameters for the stored procedure here
    @ServerIP varchar(20),@SQLUserName 20)='',1)">@PassW @DelCurLinks 10)'N',1)">@Result nvarchar(3000)'' output
AS
BEGIN

SET NOCOUNT ON;

declare @OriginalSQL 3000)
@sSQL )
 
--------------------------------------------

-判断指定的ServerIP是否已存在DBLinkServer,结合@DelCurLinks输入参数判断是否删除重建

if @DelCurLinksY' and exists(select srvname   from master.dbo.sysservers where srvname <> SERVERPROPERTY(servername') and srvname=@ServerIPbegin
    set @sSQL EXEC master.dbo.sp_dropserver @server=N'''+@ServerIP+''',@droplogins=''droplogins''' 
    Print @sSQL    
    exec sp_executesql @sSQL 
end

if not @ServerIP) or '
begin
        create  script 
        @OriginalSQL/****** Object:  LinkedServer [<ServerIP>] ******/
                EXEC master.dbo.sp_addlinkedserver @server = N<ServerIP>SQL Server
                 /* For security reasons the linked server remote logins password is changed with ######## */
                EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=NFalse<UserName><PWD>
                --GO
                EXEC master.dbo.sp_serveroption @server=Ncollation compatibletruedata accessrpcrpc outuse remote collationremote proc transaction promotion
                --GO
                '
        
        set  REPLACE( @OriginalSQL, )
        @sSQL,1)">@SQLUserName@PassW )

        begin try
             @sSQL 
             print @sSQL
             print Create Link Server['+ @ServerIP ] successfully!'
        end try

         catch
            Create Link Server [] fail! ErrMsg: ERROR_MESSAGE()     
         catch

end 

] fail! ErrMsg: Find DBLinkserver of the Same Name,Please Check it.END


GO

 

3.方法使用

方法 1: 只输入IP、UID、PWD三个参数,@DelCurLinks不显示输入【此时,@DelCurLinks默认为 N,指明当存在相同的LinkServer时,不删除直接退出。】

Exec USP_Create_DBLink 172.XXX.XXX.XXXUIDPWD'

方法 2:输入IP、UID、PWD、DelCurLinks 四个参数,显示指明当存在相同的LinkServer时,不删除直接退出。

'

方法 3:输入IP、UID、PWD、DelCurLinks 四个参数,显示指明当存在相同的LinkServer时,删除重新创建

'

 

4. 其它知识

 (1) 查询本SQL Server 已创建的所有实例

select srvname as 链接服务器'   ')

(2)删除已建立的链接服务器(LinkServer)

EXEC master.dbo.sp_dropserver @server=N@droplogins'

 

相关文章

本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的...
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中...
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册...
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看...