1 回答
TA贡献1859条经验 获得超6个赞
再会,
笔记!此消息未标记为“社区 wiki”,因此它是由特定人员以他的名义撰写的,这不是共享文章。如果您有评论,请使用评论而不是更改 OP 打算提供的内容(例如内容中的额外学习点)。谢谢!
在下面的脚本中,我给出了一个处理嵌套存储过程错误的例子。基本思想是使用TRY/CATCH来防止引发错误并停止事务,并使用OUTPUT将错误信息返回给上层SP
这只是一个基本的例子......
CREATE or ALTER PROCEDURE L1 (
@InputInt int,
@ErrMessage NVARCHAR(MAX) OUTPUT,
@ErrNum INT OUTPUT
)AS
SELECT @@NESTLEVEL AS 'Inner Level'; -- this information present the level of the SP during the execution. It is not needed for the solution but for the sake of the learning and understanding of nested SP
Select 'Start L1'
BEGIN TRY
-- When the ionput is 0 we Generate a divide-by-zero error.
SELECT 1/@InputInt;
END TRY
BEGIN CATCH
SET @ErrMessage = ERROR_MESSAGE()
SELECT @ErrMessage
END CATCH;
SET @ErrNum = @@ERROR
IF (@ErrNum > 0) Begin
SELECT 'L1 error Number: ' + CONVERT(NVARCHAR(10), @ErrNum)
Return
END
ELSE
select 'L1 OK'
GO
CREATE or ALTER PROCEDURE L2 (
@InputInt int
) AS
Declare @ErrMessage NVARCHAR(MAX) = '', @ErrNum INT = 0
SELECT @@NESTLEVEL AS 'Outer Level';
BEGIN TRY
EXEC L1 @InputInt, @ErrMessage, @ErrNum;
END TRY
BEGIN CATCH
SELECT 'There was error!'
select @@ERROR
END CATCH
GO
EXECUTE L2 1 -- OK
GO
EXECUTE L2 0; --Raise error in the nested stored procedures
GO
分享
编辑
跟随
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报