我试图捕获在链接服务器上执行存储过程时引发的 sql 错误。两台服务器都运行 SQL Server 2005。
为了证明这个问题,我在链接服务器上创建了一个名为 Raise error 的存储过程,它执行以下代码:
RAISERROR('An error', 16, 1);
如果我使用以下代码直接在链接服务器上执行存储过程,我会得到一个结果集,如预期的那样 'An error', '16' (即代码进入 catch 块):
BEGIN TRY
EXEC [dbo].[RaiseError];
END TRY
BEGIN CATCH
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
SELECT @ErrMsg, @ErrSeverity;
END CATCH
如果我在本地服务器上运行以下代码以在链接服务器上执行存储过程,则 SSMS 会给我消息“查询完成但出现错误”,.Msg 50000,级别 16,状态 1,过程 RaiseError,第 13 行错误“
BEGIN TRY
EXEC [Server].[Catalog].[dbo].RaiseError
END TRY
BEGIN CATCH
DECLARE @SPErrMsg nvarchar(4000), @SPErrSeverity int;
SELECT @SPErrMsg = ERROR_MESSAGE(), @SPErrSeverity = ERROR_SEVERITY();
SELECT @SPErrMsg, @SPErrSeverity;
END CATCH
我的问题是我可以捕捉到链接服务器存储过程执行时产生的错误吗?
提前致谢!