如何在执行存储过程时从 SQL Server Try Catch 中查找发生的异常类型



我正在执行一个存储过程,其中包含一些代码,我将其放在一个尝试捕获块中,例如

BEGIN Transaction Tran1  
BEGIN Try
    //Stored procedure code
COMMIT TRANSACTION  Tran1   
END Try
BEGIN Catch
ROLLBACK TRANSACTION Tran1 
    raiserror('Cannot commit transaction', 16, 1, @@error);
    return;
END Catch

当发生任何错误时,它会转到Catch块并引发用户定义的错误,但它不会引发实际发生的错误类型。那么我怎么能得到真正发生的错误类型,就像我们在 C# 中所做的那样,同时从前端执行它,比如

Try  
{  
  //Some code  
}  
Catch(Exception ex)  
{  
  MessageBox.Show(ex.message);  
}

请为我提供解决方案

引发的错误可作为SqlException捕获

例如

catch (SqlException sqlEx)
{
   if (sqlEx.Number == 50000)
   {
      // 
   }
}

您可以使用RAISERRORmsg_id风格来自定义SQL中的数字,或者更好的是,使用THROW

你可以

试试

BEGIN Transaction Tran1  
BEGIN Try
   //Stored procedure code
COMMIT TRANSACTION  Tran1   
END Try
BEGIN Catch
ROLLBACK TRANSACTION Tran1      
   SELECT 
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_LINE() as ErrorLine,
ERROR_MESSAGE() as ErrorMessage;   
      END CATCH

最新更新