SQLSERVER中,存储过程A调用存储过程B,如果存储过程B发生异常的话,在A里面能否获得异常信息?

不是要@@ERROR,而是要具体异常信息,即:ERROR_MESSAGE();经测试,不管B里面发生什么异常,A中顶多能能获取到@@ERROR,而获取不到ERROR_ME... 不是要@@ERROR,而是要具体异常信息,即:ERROR_MESSAGE();经测试,不管B里面发生什么异常,A中顶多能能获取到@@ERROR,而获取不到ERROR_MESSAGE();不知道哪位高人指点谜经?
或者如何通过@@ERROR如何能得到MESSAGE信息也可以
展开
 我来答
guoweifyj
2011-09-28 · TA获得超过346个赞
知道小有建树答主
回答量:158
采纳率:100%
帮助的人:169万
展开全部
楼上意思是在你的:
BEGIN TRY
EXEC @RESULT =ADMAPP.ADMAPP.sp_TEST2 --sp_TEST2 内部会发生异常
PRINT @@ERROR--此处打出来的是:0
END TRY
非PRINT出错误信息,而是 RAISERROR函数抛出异常,自然可以在CACTH块中捕获异常信息;
给个例子:
...
BEGIN
SET @IDS=STUFF(@IDS,1,1,'') --删除第一个','
RAISERROR('these id could''t insert:%s',16,1,@IDS) --抛出错误,自定义
END
END TRY
BEGIN CATCH
IF XACT_STATE()<>0 --当前有活动用户事务
ROLLBACK TRAN
DECLARE
@ErrorStr NVARCHAR(1000),@ErrorSeverity int,@ErrorState int,
@ErrorNumber int,@ErrorProcedure sysname,@ErrorLine int,@ErrorMessage nvarchar(4000)
SELECT
@ErrorStr=N'Error %d,Level %d,State %d,Procedure %s,Line %d,Message:%s',
@ErrorSeverity=ERROR_SEVERITY(),--错误严重性
@ErrorState=ERROR_STATE(),--错误状态号
@ErrorNumber=ERROR_NUMBER(),--错误号
@ErrorProcedure=ERROR_PROCEDURE(),--错误出现的存过或者触发器名称
@ErrorLine=ERROR_LINE(),--错误出现行
@ErrorMessage=ERROR_MESSAGE()

RAISERROR(--抛出错误,亦可以用PRINT
@ErrorStr, --抛出错误执行输出的错误信息内容
@ErrorSeverity,--错误的级别,严重性
@ErrorState, --状态,用@ErrorState也可以吧
@ErrorNumber,--错误号
@ErrorSeverity,--级别,严重性
@ErrorState,--状态
@ErrorProcedure,--错误出现的存过\触发器名称
@ErrorLine,--行数
@ErrorMessage--错误信息
)
END CATCH
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hmloo20101112
2011-09-16 · TA获得超过383个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:245万
展开全部
你必须在嵌套最里面的存储过程中RAISERROR抛出错误,然后在外层才能得到,试试这样
BEGIN TRY

END TRY
BEGIN CATCH
DECLARE @ErrMsg NVARCHAR(4000),
@ErrSeverity INT
SELECT @ErrMsg = Error_message(),
@ErrSeverity = Error_severity()
RAISERROR (@ErrMsg,@ErrSeverity,1)
END CATCH
追问
关键是,根本就进不到CATCH里面,貌似子存储过程无论发生什么异常,父级存储过程中都不认为它是个异常,如下:
@RESULT INT
BEGIN TRY
EXEC @RESULT =ADMAPP.ADMAPP.sp_TEST2 --sp_TEST2 内部会发生异常
PRINT @@ERROR--此处打出来的是:0
END TRY
BEGIN CATCH
PRINT '11111'
END CATCH
结果根本就打不出来'11111'
追答
我的意思是你在sp_TEST2 中抛出异常,然后在上面才能catch到
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式