Sql-Server

查找是否儲存過程錯誤

  • November 28, 2018

T-SQL中是否有一種方法可以查看儲存過程中是否發生錯誤,而不使用@Output或try catch?

我們有很多遺留程式碼 200 多個儲存過程。我已經看到了@Output 方法並嘗試了 catch,但是我們必須重構遺留程式碼,這可能會破壞。只是好奇,如果有一種方法可以在不更改舊程式碼的情況下擷取錯誤。

declare @TestErrorFlag bit -- or can be int or varchar(255)

-- trying to do something similar to this
set @TestErrorFlag  = if error(exec dbo.testprocedure)

Trying to store in some type of indicator variable

@TestErrorFlag = 1 if procedure succeeds, 
@TestErrorFlag = 0 if procedure fails

如果儲存過程中的錯誤條件引發異常,那麼在不更改過程內部程式碼的情況下,您唯一的選擇實際上是將呼叫包裝在try/中catch

BEGIN TRY;
 EXEC sys.sp_helpdb @foo = 1;
END TRY
BEGIN CATCH
 PRINT ERROR_MESSAGE();
END CATCH;

如果您的程序返回一個錯誤號而沒有引發異常,例如:

CREATE PROCEDURE dbo.bob
 @fail bit = 0
AS
BEGIN
 IF (@fail = 1)
 BEGIN
   RETURN -1;
 END
 -- unnecessary, but:
 ELSE
 BEGIN
   RETURN 0;
 END
END

然後你可以使用這種格式:

DECLARE @TestErrorFlag int;
EXEC @TestErrorFlag= dbo.bob @fail = 1;
PRINT @TestErrorFlag;

當然,在這種情況下,如果過程中的任何錯誤條件確實導致異常,PRINT則不會發生。


錯誤處理是一個龐大的話題。我會瀏覽這些文章:

引用自:https://dba.stackexchange.com/questions/223689