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的返回值 - 无论链接服务器是否存在.
我在这里做错了什么想法?
您的@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)