1 回答

TA貢獻1859條經驗 獲得超6個贊
再會,
筆記!此消息未標記為“社區 wiki”,因此它是由特定人員以他的名義撰寫的,這不是共享文章。如果您有評論,請使用評論而不是更改 OP 打算提供的內容(例如內容中的額外學習點)。謝謝!
在下面的腳本中,我給出了一個處理嵌套存儲過程錯誤的例子?;舅枷胧鞘褂肨RY/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 關注
- 95 瀏覽
添加回答
舉報