Sql-Server
查找是否儲存過程錯誤
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;
當然,在這種情況下,如果過程中的任何錯誤條件確實導致異常,
錯誤處理是一個龐大的話題。我會瀏覽這些文章: