有时候为了数据完整我们会启用到事务。正常的时候一帆风顺,如果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. VirtualBox网络设置的问题

    在VirtualBox里新建了一个虚拟Linux系统,默认的连接方式是网络地址转换(NAT).发现主机不能访问虚拟机的samba服务器,ping了一下,虚拟机可以ping主机,但是主机不能ping虚拟 ...

  2. hibernate简单注释(一.1)

    **************************************************************************************************** ...

  3. 修正 Memo 設定為 ReadOnly 後, 無法有複製的功能

    问题:当 Memo 設定為 ReadOnly = True 後, 选取一段文字后,無法有複製的功能. 适用:XE6 Android 系统(目前 iOS 还找不到方法) 修正方法: 请将源码 FMX.P ...

  4. 泛函编程(32)-泛函IO:IO Monad

    由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码( ...

  5. SDL教程第一和第二个视频的笔记

    观看正月点灯笼的SDL教程,地址http://www.tudou.com/listplay/9eG9tkk91oQ.html #include <stdio.h> #include < ...

  6. 形象化的spring 依赖注入原理

      转. IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制.这称为控制反转. 下面我们以几个例子来说明什 ...

  7. 如何解决CRUD操作中与业务无关的字段赋值

    提高效率一直是个永恒的话题,编程中有一项也是可以提到效率的,那就是专注做一件事情,让其它没有强紧密联系的与之分开.这里分享下我们做CRUD时遇到的常见数据处理场景: 数据库表字段全部设计为非空,即使这 ...

  8. 小白linux安装php 5.6+nginx配置(踩坑版)

    因为要搭建个知识库,直接用wordpress,这前提是得先装php,实在不喜欢XAMPP,所以自己折腾,没想到php这一来还不少啊,从头到尾折腾了一个小时多.记录下主要的流程和遇到的坑. 首先官网下载 ...

  9. get()和post()方法编码的区别

    在做ssh搭建的框架中,在后台条件查询的时候,组合查询传到后台的值一直是乱码,其中在form表单中必须要加上method,这一点是肯定的,但是加上了提交的方式之后,会出现如下问题: 如果使用get方法 ...

  10. 一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件

    一款很实用的jQuery鼠标悬浮有动画效果的响应式瀑布流插件 在线预览 下载地址 实例代码 <!doctype html> <html lang="zh"> ...