【发布时间】:2010-03-23 21:03:01
【问题描述】:
我试图捕捉在链接服务器上执行存储过程时引发的 sql 错误。两台服务器都运行 SQL Server 2005。
为了证明这个问题,我在链接服务器上创建了一个名为引发错误的存储过程,该过程执行以下代码:
RAISERROR('An error', 16, 1);
如果我使用以下代码直接在链接服务器上执行存储过程,我会得到一个带有“错误”、“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
我的问题是我可以捕捉到链接服务器存储过程执行时产生的错误吗?
提前致谢!
【问题讨论】:
标签: sql-server linked-server try-catch