有时候为了数据完整我们会启用到事务。正常的时候一帆风顺,如果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. 程序员下一门要学的编程语言Swift

    基于PHP是世界上最好的编程语言这个真理,我一直认为Hack才是程序员要学的下一门编程语言. 但今天看到InfoQ放出的新闻:"Google或许会将Swift编程语言纳入Android平台并 ...

  2. <记录学习>(前三天)京东页面各种注意点

    培训学校第1到3天先学习HTML现在流行的是HTML5,目前学习的是HTML5规范.(给有基础一定的人学习)前三天学习的是京东页面的编写,和以前写的不同,页面看上去和自己写的一样,但老师讲的还是有很多 ...

  3. MyEclipse之无法连接到MySQL数据库

    问题描述: 在连接mysql中出现如下警告 Fri Oct 28 02:21:53 CST 2016 WARN: Establishing SSL connection without server' ...

  4. 用js动态生成css代码

    有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...

  5. 【iScroll源码学习02】分解iScroll三个核心事件点

    前言 最近两天看到很多的总结性发言,我想想今年好像我的变化挺大的,是不是该晚上来水一发呢?嗯,决定了,晚上来水一发! 上周六,我们简单模拟了下iScroll的实现,周日我们开始了学习iScroll的源 ...

  6. SQLServer表内自关联级联删除

    今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...

  7. JavaScript学习笔记-函数实例

    函数实例 var p = { a:15, b:'5', f1:function(){ var self = this; console.log(self.a+self.b); f2(); functi ...

  8. Sass的使用和基础语法

    sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...

  9. SAP用户权限解剖及自修改

    通常BASIS会使用PFCG做权限管理,时你保存时会产生一个系统外的profile name,记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢? 首先明白几个概念.1.acti ...

  10. 调用CRM自己的Dialogue

    var DialogOption = new Xrm.DialogOptions; DialogOption.width = document.body.clientWidth * 0.9; Dial ...