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

标签 sql sql-server

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

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

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

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

OLE DB provider "MSDASQL" for linked server "server1" returned message " Communication link failure;-10709 Connect failed (connect timeout expired)". Msg 7303, Level 16, State 1, Procedure sp_testlinkedserver, Line 1 Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "server1".

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

最佳答案

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

  • 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

关于sql - 测试链接服务器的连接并返回连接的链接服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399782/

相关文章:

sql - 使用 File I/O Api 创建图像后获取 FileTable stream_id

sql - 无法删除 UNIQUE 约束

SQL在特定日期选择重复项

sql-server - 带有间隙的 Azure 数据工厂复制标识列

sql - : Store update, 插入或删除语句影响意外行数的解决方案 (0)

php - 如何编写一个程序来每 x 分钟自动修改现有的 SQL 数据库?

sql-server - 具有高可用性组的多宿主 SQL Server

sql - 由于 case 语句,同一 ID 的多个实例填充在不同的列中

sql - PostgreSQL - 使用模式匹配连接表

sql - 在 nvarchar 声明中省略 size 有什么影响