【发布时间】:2022-01-06 20:52:08
【问题描述】:
我在 try..catch 中调用旧版存储过程。当存储过程以简单的语言向用户返回带有错误详细信息的消息时,我的try..catch 无法检测到。
遗留存储过程返回的消息如下:
错误状态:1,错误严重程度:16,错误编号:50000 错误行: 33、错误过程:LegacyStoredProcedure
错误信息:请多多关照...... 回滚事务。
有没有办法检测存储过程返回的消息?
BEGIN TRY
BEGIN Transaction
.....
EXEC *thelegacySP*
.....
COMMIT Transaction
END TRY
BEGIN CATCH
DECLARE
@ErrorLine int,
@ErrorMessage nvarchar(2048),
@ErrorNumber int,
@ErrorProcedure nvarchar(126),
@ErrorSeverity int,
@ErrorState int;
SELECT @ErrorLine = ERROR_LINE(),
@ErrorMessage = ERROR_MESSAGE(),
@ErrorNumber = ERROR_NUMBER(),
@ErrorProcedure = '*MyNewSP*',
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@now = GETDATE()
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState)
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
INSERT INTO Validation.Table
VALUES(
@ErrorProcedure
,@ErrorNumber
,@ErrorMessage
,@ErrorSeverity
,@ErrorState
,@ErrorLine
,@now
)
END CATCH
【问题讨论】:
-
该消息是如何返回的?
标签: sql sql-server tsql stored-procedures error-handling