有时候为了数据完整我们会启用到事务。正常的时候一帆风顺,如果rollback 呢?

最简单的一个回滚
IF OBJECT_ID('PROC1') IS NOT NULL
    DROP PROCEDURE dbo.PROC1;
GO
CREATE PROCEDURE PROC1
AS
    BEGIN
        BEGIN TRY
            BEGIN TRAN;
            SELECT  'Tran1' ,1;
            RAISERROR(16,1,1);
            SELECT  'Tran1' ,2;
            COMMIT TRAN;
        END TRY
        BEGIN CATCH
   SELECT  'Tran1' ,3;
            ROLLBACK TRAN;
            SELECT  'Tran1' ,4;
            RETURN -1;
        END CATCH;
 
    END;
GO
 
执行一下,抛出错误后继续向下执行。

当事务有嵌套的时候。在抛出错误的事务里面,会继续执行批处理剩下的语句,最后才回滚上去并往上层抛错误。非抛出层和最外层事务,语句运行至rollback就往上层抛。
如下
 
 
IF OBJECT_ID('PROC2') IS NOT NULL
 DROP PROCEDURE dbo.PROC2
go
CREATE PROCEDURE PROC2
AS
BEGIN
 BEGIN TRY
 BEGIN TRAN
  SELECT 'Tran2',1
  EXEC dbo.PROC1
  SELECT 'Tran2',2
 COMMIT TRAN
 END TRY
 BEGIN CATCH
  SELECT 'Tran2',3
  ROLLBACK TRAN
  SELECT 'Tran2',4
  RETURN -2
 END CATCH
END
GO
 
 
IF OBJECT_ID('PROC3') IS NOT NULL
 DROP PROCEDURE dbo.PROC3
go
CREATE PROCEDURE PROC3
AS
BEGIN
 BEGIN TRY
 BEGIN TRAN
  SELECT 'PROC3',1
  EXEC dbo.PROC2
  SELECT 'PROC3',2
 COMMIT TRAN
 END TRY
 BEGIN CATCH
  SELECT 'PROC3',3
  ROLLBACK TRAN
  SELECT 'PROC3',4
  RETURN -3
 END CATCH
END
GO
 
执行存储过程
SET NOCOUNT ON;
DECLARE @INT INT
EXEC @INT=dbo.PROC3
SELECT @INT
 
 
 
 

rollback在嵌套触发器中,如果在触发器的事务里面抛出错误,回滚之前触发器的语句修改,继续执行rollback之后的语句。但并不会激活之后的触发器
 
CREATE TABLE TestTR
(
 ID INT PRIMARY KEY,
 Name NVARCHAR(50)
)
 
CREATE TABLE TRTB1
(
 ID INT PRIMARY KEY,
 Col1 INT
)
 
CREATE TRIGGER TR_TESTTR1 ON dbo.TestTR AFTER
INSERT AS
BEGIN TRY
BEGIN TRAN
 INSERT INTO dbo.TRTB1
   ( ID, Col1 )
 VALUES  ( 1,
     CONVERT(INT,'a') )
COMMIT TRAN
END TRY
BEGIN CATCH
 ROLLBACK TRAN
 INSERT INTO dbo.TestTR
         ( ID, Name )
 VALUES  ( 1,
     CONVERT(INT,'2') )
END CATCH
GO
 
 
INSERT INTO TestTR ( ID, Name )
 VALUES  ( 4,
     CONVERT(INT,'3') )
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Rollback 语句 在08R2版本的更多相关文章

  1. MySQL 数据库SQL语句——高阶版本2

    MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...

  2. MySQL 数据库SQL语句——高阶版本1

    MySQL 数据库SQL语句--高阶版本 实验准备,数据表配置 mysql -uroot -p show databases; create database train_ticket; use tr ...

  3. IE中的if语句--实现不同版本IE浏览器不同html代码 (转)

    在很多html代码中常常可以看到很多的IE的条件语句,有时候很不明白他们的意思,其实这是为了能与低版本浏览器实现更好的兼容,例如在制作纯CSS的级联菜单时,由于在IE6中只有<a>支持伪类 ...

  4. 《oracle每天一练》触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句

    触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句 在触发器中不能运行 ddl语句和commit,rollback语句 ddl语句:DDL语句用语定义和管理数据库中的对象,如Creat ...

  5. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  6. Centos7使用Yum安装高版本的LNMP

    [摘要] 本文旨在介绍使用yum的方式安装一些高版本的NGINX.MySQL.PHP服务.当然如果觉得红帽给的就够用,就用红帽给的就行. 在红帽系列的Linux操作系统中,nginx/mysql/ph ...

  7. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  8. select语句for update---转载

    作用: Select…For Update语句的语法与select语句相同,只是在select语句的后面加FOR UPDATE [NOWAIT]子句. 该语句用来锁定特定的行(如果有where子句,就 ...

  9. MySQL数据库学习笔记(三)----基本的SQL语句

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. Android存储空间不足的解决办法

    安装应用时,有时会出现错误Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE,这是存储空间不足的错误,这时就只能将应用安装到SD卡,在And ...

  2. [转]PHP编码规范

    注:这是10年前的一篇PHP编码规范,最早发布于清华水木BBS,现在好像都找不到完整的版本了,但至今看起来仍是非常有参考意义.个人会根据经验做一些调整.文中对于命名一段的描述极大的曾启发了个人的编程体 ...

  3. 从零开始学Python04作业源码:模拟ATM电子银行(仅供参考)

    bin目录:程序启动入口 ATM_start.py: #!/usr/bin/python # -*- coding: utf-8 -*- # 模拟ATM电子银行+登录账户权限控制+管理员管理模块 # ...

  4. 2016 长春东北赛---Coconuts(离散化+DFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...

  5. Scalaz(54)- scalaz-stream: 函数式多线程编程模式-Free Streaming Programming Model

    长久以来,函数式编程模式都被认为是一种学术研究用或教学实验用的编程模式.直到近几年由于大数据和多核CPU的兴起造成了函数式编程模式在一些实际大型应用中的出现,这才逐渐改变了人们对函数式编程无用论的观点 ...

  6. C++析构函数调用异常问题研究

    最近又遇到一个奇葩问题,程序在自己的开发机器和某些机器上运行完好,但是在测试人员的几台机器上运行就直接推出了.开始以为是出现了野指针,因为delete野指针时程序会直接退出.代码翻来覆去过来即便确认没 ...

  7. PHP storm快捷键

    左边文件路径看不到了,按alt+1就出来了 ctrl+j 插入活动代码提示 ctrl+alt+t 当前位置插入环绕代码 alt+insert 生成代码菜单 ctrl+q 查看代码注释 ctrl+d 复 ...

  8. MyEclipse常用插件使用教程

    一.Findbugs 1. 配置 1.1 打开FindBugs视图: Windows => Show View => Other… => FindBugs => Bug Inf ...

  9. linux下安装rzsz

    1.登陆linux,下载rzsz安装包 wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz 2.tar zxvf rzsz-3.48.t ...

  10. cnodejs社区论坛2--注册