链接服务器连接成功后如何执行SQL脚本?

问题描述 投票:0回答:2

链接服务器连接成功后如何执行SQL脚本

这个脚本来自其他网站。 但我不知道如何在连接成功时在脚本下方插入查询。

----------------------------------------------
declare @srvrnvarchar(128),@retvalint;

set@srvr='MylinkedServerName';

begintry

exec @retval=sys.sp_testlinkedserver@srvr;

endtry

begincatch

set @retval=sign(@@error);

endcatch;

if@retval<> 0

raiserror('Unable to connect toserver. This operation will be tried later!',16, 2 );
-----------------------------------------------------
sql sql-server linked-server
2个回答
0
投票

谢谢大家 我找到了答案。

    DECLARE @tryTimes INT, @linkedServerName nvarchar(128), @returnVal INT
SET @tryTimes=5
SET @linkedServerName='server1'

WHILE @tryTimes>0
BEGIN
    BEGIN TRY
        EXEC @returnVal = sys.sp_testlinkedserver @linkedServerName
    END TRY
    BEGIN CATCH
        SET @returnVal=SIGN(@@ERROR)
    END CATCH

    IF @returnVal=0
    BEGIN
        BREAK;
    END
    WAITFOR DELAY '00:02:00'
    SET @tryTimes=@tryTimes-1
END

IF @returnVal <> 0
BEGIN
    RAISERROR ('Cannot connect LinkedServer',16,2);
END
ELSE
BEGIN
    SELECT count(*) FROM [xxxx].[xxxx].[xxxx].[xxxxxx]
    PRINT 'run your query'
END

0
投票

重试逻辑的改进版本。

  • sp_testlinkedserver
    如果有异常就会抛出,所以抓住它。
  • 如果它一直失败,则重新抛出原始异常。
  • 将实际查询放入一个单独的动态 SQL 批处理中,否则当它试图编译整个批处理时,您可能会在开始时出错。
DECLARE @tryTimes INT = 5, @linkedServerName sysname = 'server1';

WHILE @tryTimes > 0
BEGIN
    BEGIN TRY
        EXEC sys.sp_testlinkedserver @linkedServerName;
        BREAK;
    END TRY
    BEGIN CATCH
        SET @tryTimes -= 1;
        IF @tryTimes = 0
            THROW;
    END CATCH

    WAITFOR DELAY '00:02:00';
END;

EXEC sp_executesql N'
SELECT count(*)
FROM [xxxx].[xxxx].[xxxx].[xxxxxx];
';  -- add parameters as needed

我必须说,这样做的智慧值得怀疑。如果连接时出现错误,那么错误不太可能在 2 秒内改变。将此逻辑放在您的客户端应用程序中可能更明智,并允许用户决定要做什么。

© www.soinside.com 2019 - 2024. All rights reserved.