我想编写一个脚本来测试所有链接的服务器,并返回唯一已连接的服务器(可以肯定只有一个)。
这是我当前的脚本,但是我被困在这一点上:
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”的数据源对象。
任何想法,如何通过错误消息?
更改了代码中的一些内容……试试吧。
。
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