BEGIN TRY---------开始捕捉异常
BEGIN TRANSACTION----------------------开始事务
EXEC ProcName @ProcParam-----------执行存储过程[报错,则错误信息会被捕捉]
COMMIT --------------------------------提交事务
END TRY-----------结束捕捉异常
BEGIN CATCH------有异常被捕获
IF @@TRANCOUNT > 0---------------------判断有没有事务
BEGIN
ROLLBACK -----------------------回滚事务
END
-- Print error information.
PRINT 'ErrorNumber : ' +CONVERT(varchar(50), ERROR_NUMBER())
PRINT 'ErrorSeverity : ' + CONVERT(varchar(5), ERROR_SEVERITY())
PRINT 'ErrorState :' + CONVERT(varchar(5), ERROR_STATE())
PRINT 'ErrorProcedure :' + ISNULL(ERROR_PROCEDURE(), '-')
PRINT 'ErrorLine :' + CONVERT(varchar(5), ERROR_LINE());
PRINT 'ErrorMessage :' + ERROR_MESSAGE();
END CATCH--------结束异常处理
实例应用:PHP 代码捕捉存储过程错误信息
$sp = " BEGIN TRY---------开始捕捉异常
BEGIN TRANSACTION------------------开始事务
exec $proc_ame $param
COMMIT ----------------------------提交事务
END TRY-----------结束捕捉异常
BEGIN CATCH------有异常被捕获
IF @@TRANCOUNT > 0---------------------判断有没有事务
BEGIN
ROLLBACK ----------------------回滚事务
END
-- 返回错误信息
SELECT 'ErrorProcedure :' + ISNULL(ERROR_PROCEDURE(), '-') + 'ErrorMessage :' + ERROR_MESSAGE() as ErrMessage
END CATCH";
$stmt = $this->notORM->connection->prepare($sp);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(isset($result[0]['ErrMessage'])){
throw new \PDOException($result[0]['ErrMessage'], 500);
}
return $result;
php 捕捉到存储过程错误信息如下:
存储过程 直接执行错误信息如下:
TRY…CATCH 使用下列错误函数来捕获错误信息:
- ERROR_NUMBER() 返回错误号。
- ERROR_MESSAGE() 返回错误消息的完整文本。
- ERROR_SEVERITY() 返回错误严重性。
- ERROR_STATE() 返回错误状态号。
- ERROR_LINE() 返回导致错误的例程中的行号。
- ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
参考资料:
存储过程——异常捕获&打印异常信息
动态获取存储过程的参数