用于获取链接服务器状态的存储过程

Raf*_*ael 2 t-sql sql-server stored-procedures linked-server

我正在尝试创建一个存储过程来获取链接服务器的状态,以防止在尝试执行任何操作时出错.我在网上看到了一些例子,但我没有取得任何成功.

这是我的代码:

ALTER PROCEDURE [dbo].[checkLinkedServer] 
    @servername ntext
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @retval int = 0;
    BEGIN TRY
        EXEC @retval = sys.sp_testlinkedserver @servername;
        SELECT 1;
    END TRY
    BEGIN CATCH
        SELECT 0;
    END CATCH;      
END
Run Code Online (Sandbox Code Playgroud)

我总是得到0的返回值 - 无论链接服务器是否存在.

我在这里做错了什么想法?

col*_*dbh 6

您的@servername参数必须是sysname而不是ntext类型,如错误消息所示

如果你不能改变进入过程的参数,那么考虑在proc中创建一个新变量并进行转换:

ALTER PROCEDURE [dbo].[checkLinkedServer] 
    @servername ntext
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @retval int = 0,
            @sysservername sysname;
    BEGIN TRY
        SELECT  @sysservername = CONVERT(sysname, @servername);
        EXEC @retval = sys.sp_testlinkedserver @sysservername;
        SELECT 1;
    END TRY
    BEGIN CATCH
        SELECT 0;
    END CATCH;      
END
Run Code Online (Sandbox Code Playgroud)