测试链接服务器的连接并返回连接的链接服务器

2024-04-26

我想编写一个脚本来测试所有链接的服务器并返回唯一连接的服务器(肯定只有一个)。

这是我当前的脚本,但我陷入了困境:

DECLARE @retval INT
DECLARE @connected INT
DECLARE @name NVARCHAR(100)
DECLARE @getid CURSOR

SET @connected = 0

SET @getid = CURSOR FOR
SELECT name as Servers FROM sys.servers


OPEN @getid

FETCH NEXT FROM @getid INTO @name
WHILE @@FETCH_STATUS = 0

BEGIN
        EXEC @retval = sys.sp_testlinkedserver @name
        SELECT @name
        FETCH NEXT
        FROM @getid INTO @name

END

CLOSE @getid
DEALLOCATE @getid

但使用此查询时,代码会在第一次迭代时停止,因为它无法连接到表的第一台服务器。 这是错误消息:

链接服务器“server1”的 OLE DB 提供程序“MSDASQL”返回消息“通信链接失败;-10709 连接失败(连接超时已过期)”。 消息 7303,级别 16,状态 1,过程 sp_testlinkedserver,第 1 行 无法初始化链接服务器“server1”的 OLE DB 提供程序“MSDASQL”的数据源对象。

知道如何传递错误消息吗?


更改了代码中的一些内容...尝试一下。

  • IsOff 只是表示连接失败。
  • 我添加了一个 where 子句来仅查看链接服务器
  • 我从未将光标视为变量,因此我删除了它以及其他我不需要的变量
  • 使用 TRY/CATCH,因为 sys.sp_testlinkedserver 会引发异常(如果不成功)。
  • 返回失败原因
  • 将所有结果存储到表变量中,仅返回失败的结果

.

DECLARE @name NVARCHAR(100)

declare @table table (IsOff int, ServerName varchar(100), TheError varchar(4000))


DECLARE getid CURSOR FOR
SELECT  name FROM sys.servers where is_linked = 1


OPEN getid

FETCH NEXT FROM getid INTO @name
WHILE @@FETCH_STATUS = 0

BEGIN

    begin try
        exec sys.sp_testlinkedserver @name
    end try

    begin catch
        insert into @table
        values
        (1,@name,ERROR_MESSAGE())
    end catch

FETCH NEXT FROM getid INTO @name

END

CLOSE getid
DEALLOCATE getid

select ServerName, TheError from @table where IsOff = 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试链接服务器的连接并返回连接的链接服务器 的相关文章

随机推荐