我正在执行一个存储过程,其中包含一些代码,我将其放在一个尝试捕获块中,例如
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)
{
//
}
}
您可以使用RAISERROR
的msg_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