SQLServer 异常捕获,回滚,再抛出

一个存储过程中多个更新操作,后面的更新操作出现异常,如果不手动回滚前面修改的数据是不会自动撤销的!

BEGIN TRY
    BEGIN TRAN
-- .....
    COMMIT TRAN
END TRY

BEGIN CATCH
    ROLLBACK TRAN

    DECLARE @ErrorMessag NVARCHAR(255)
    SELECT @ErrorMessag = Error_message()
    RAISERROR (15600,-1,-1,@ErrorMessag);
END CATCH

另参考: http://msdn.microsoft.com/zh-cn/library/ms178592.aspx

BEGIN TRY
    -- RAISERROR with severity 11-19 will cause execution to
    -- jump to the CATCH block.
    RAISERROR (‘Error raised in TRY block.‘, -- Message text.
               16, -- Severity.
               1 -- State.
               );
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

    -- Use RAISERROR inside the CATCH block to return error
    -- information about the original error that caused
    -- execution to jump to the CATCH block.
    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;
时间: 2024-11-09 04:40:27

SQLServer 异常捕获,回滚,再抛出的相关文章

关于抛异常事务回滚的测试

TestController.java 代码如下***: /** * 测试异常回滚. * @return */ @RequestMapping(value = "/testExceptionRollBack") @ResponseBody public String testExceptionRollBack() { List<String> idList = Lists.newLinkedList(); idList.add("1111111111")

SQLServer异常捕获(Try Catch)

/* SQLServer异常捕获 在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常处理,通过日志表来记录存储过程的执行情况,然而定位到错误的存储过程,以下是一个存储过程异常处理的小实例: */ /*===================================================== 相关错误消 息如下: ERROR_NUMB

sqlserver事务与回滚

如果要在Production执行数据改动必须小心,可以使用事务提前验证一下自己写的SQL是不是你期望的.尤其是Update的where 条件有问题的话,跟新的记录就会超出预期的范围.如下面的语句,一着急我差点把cartid = 678417 忘了,要是在Production执行影响就大了. BEGIN TRANSACTION update cartitem set deleted=0 where cartid = 678417 and modifieddate > '2014-08-07' se

Python(八) —— 异常(概念、捕获、传递、抛出)

异常的概念 捕获异常 异常的传递 抛出异常 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常 捕获异常 1.简单的捕获异常语法 在程序开发中,如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常 捕获异常最简单的语法格式 try: 尝试执行的代码 except: 出现错误的处理 try 尝试,下方编写要尝试代码,不确

Spring事务管理只对出现运行期异常进行回滚

使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作.那么什么是检查型异常什么又是非检查型异常呢?最简单的判断点有两个:1.继承自runtimeexception或error的是非检查型异常,而继承自exception的则是检查型异常(当然,runtimeexception本身也是exception的子类). 2.对非检查型类

SQLServer异常捕获

在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常处理,通过日志表来记录存储过程的执行情况,然而定位到错误的存储过程,以下是一个存储过程异常处理的小实例: CREATE DATABASE TEST USE TEST /*===================================================== 相关错误消 息如下:

service层中数据异常时回滚

/**删除  * @param pd  * @throws Exception  */ @Transactional(rollbackFor = Exception.class) @Override public void delete(String INCOMINGDISPATCHDOCId)throws Exception{ // 删除文件附件 fileService.deleteByBusId(INCOMINGDISPATCHDOCId); dao.delete("IncomingDisp

检查时异常和运行是异常 + 事务回滚

检查时异常checked Exception 是编译检查时候就能发现的异常.这个能在try catch中处理,就在try catch 中处理. 运行时异常(Runtime Exception),是程序遇到了问题,需要停下.这个不用try catch 处理,因为遇到这个程序就停下了...... spring框架中能默认回滚的异常时 Runtime Exception. 需要在方法上添加 @Transactional(rollbackFor={Exception.class}) 此文为笔记 参考链接

2017/9/11操盘手项目遇到的问题:遇到异常不回滚

配置回滚标签@Transactional的方法不能用,按照http://blog.csdn.net/will_awoke/article/details/12002705中的springMVC文件配置方法,对dispatcher.xml和application.xml配置文件做区分, Spring容器优先加载由ServletContextListener(对应applicationContext.xml)产生的父容器,而SpringMVC(对应mvc_dispatcher_servlet.xml