有时候为了数据完整我们会启用到事务。正常的时候一帆风顺,如果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. Cursors in MySQL Stored Procedures

    https://www.sitepoint.com/cursors-mysql-stored-procedures/ After my previous article on Stored Proce ...

  2. Scalaz(52)- scalaz-stream: 并行运算-parallel processing concurrently by merging

    如果scalaz-stream真的是一个实用的数据流编程工具库的话,那它应该能处理同时从多个数据源获取数据以及把数据同时送到多个终点(Sink),最重要的是它应该可以实现高度灵活的多线程运算.但是:我 ...

  3. 转载java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.spinner/com.example.spinner.MainActivity}: java.lang.NullPointerException

    今天学习Android开发突然遇到了这个问题,查阅了很多资料,并且对集中原因进行了分析. 错误信息字符串:java.lang.RuntimeException: Unable to start act ...

  4. nginx+uwsgi 部署 django

    预装:nginx,  django Django站点tree |Site |-----Blog(自建的项目) |-----Manage.py |-----Site(setting url wsgi-. ...

  5. 「Unity」与iOS、Android平台的整合:2、导出的Android-Eclipse工程

    谢谢关注~由于博客园的写字有些蛋疼,已经搬迁到简书了 这是本篇文章的最新连接

  6. linux TCP: time wait bucket table overflow

    早上一台rabbitmq和Java所在的服务器,客户端反馈超级卡,看io和cpu都不高.发现六七万消息挤压,临时性问题解决之后,看/var/log/messages,发现很多TCP: time wai ...

  7. PHP发短信 PEAR 包:Services_Sms

    PHP发短信 PEAR 包:Services_Sms 对于这种第三方库,PHP官方称之为PEAR,需要按照PEAR标准开发(标准URI). PEAR的优势:一键安装到php/lib/php目录,req ...

  8. FancyBox - 经典的 jQuery Lightbox 插件

    FancyBox 是一款非常优秀的弹窗插件,能够为图片.HTML 内容和其它任务的多媒体内容提供优雅的弹出缩放效果.作为是最流行的 Lightbox 插件之一,可以通过 fitToView 实现自适应 ...

  9. Office 365 – SharePoint 2013 Online 之WebPart开发、部署教程

    1.打开Visual Studio,新建一个项目,选择SharePoint空项目,如下图: 2.选择调试站点和沙盒解决方案,如下图: 3.在项目中,添加一个WebPart,如下图: 4.添加完毕的项目 ...

  10. 【转】SharePoint camel query查询 event 或者Calendar 日历列表的时候,怎么查询所有的重复发生的事件

    When you query a SharePoint calendar your results will contain: All non-recurring events The first e ...