sql 事务和回滚

摘要:
(1)setANSI_NULLSON--见图1setQUOTED_IDENTIFIERONgoALTERproc[dbo].[procname]asbeginbegintransactionDECLARE@myerrorINTset@myerror=0deletefromtbnameSET@myerror=@myerror+@@ERRORinsertintotbname2select*fromtb

(1)

set ANSI_NULLS ON --见图1
set QUOTED_IDENTIFIER ON
go

ALTER proc [dbo].[procname]
as
begin
    begin transaction
    DECLARE @myerror INT  
    set @myerror=0  
    delete fromtbname
    SET @myerror=@myerror+@@ERROR 
    insert into tbname2 select * from tbname where a>1
    SET @myerror=@myerror+@@ERROR 

    IF @myerror>0
        begin
        rollback transaction
        end
    else
        begin
        commit transaction
        end

end

图1

当ANSI_NULLS置ON,比较要用is而不是=

sql 事务和回滚第1张

set XACT_ABORT ON   ---如果不设置该项为ON,在sql中默认为OFF,那么只只回滚产生错误的 Transact-SQL 语句;设为ON,回滚整个事务

begin tran t1 ---启动一个事务

update [water].[dbo].[ErrorInf] set ErrorMessage='test' where ID=6

insert into [water].[dbo].[ErrorInf]([ID],ErrorMessage,[Description])Values(1,'test1','test1')

commit tran t1  ---提交事务

sql2005支持try

BEGINTRY
   BEGIN TRANSACTION
     insert into dbo.area values('1111')
    insert into dbo.area values('2222')
    select 1/0
    insert into dbo.area values('333')
   COMMIT
ENDTRY
BEGINCATCH
   IF @@TRANCOUNT > 0
     ROLLBACK

  DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
  SELECT @ErrMsg =ERROR_MESSAGE(),
         @ErrSeverity =ERROR_SEVERITY()

  RAISERROR(@ErrMsg, @ErrSeverity, 1)
END CATCH

+

20160822

alter procP002 
(
@i2 varchar(20)
)
as
begin trant001
    begintry 
        insert into dbo.t_test4 (i2)values(@i2)
        commit trant001
    endtry 

    begincatch
        print convert(nvarchar, ERROR_NUMBER())+ ':返回错误号'

        print convert(nvarchar,ERROR_MESSAGE()) +':返回错误信息'  

        print convert(nvarchar,ERROR_LINE()) +':返回错误所在的行' 

        print convert(nvarchar,ERROR_PROCEDURE()) +':返回出现错误的存储过程或触发器的名称。如果在存储过程或触发器中未出现错误,该函数返回 NULL'   

        print convert(nvarchar,ERROR_STATE()) +':返回状态' 

        print convert(nvarchar,ERROR_SEVERITY()) +':返回严重性' 

        rollback trant001
    end catch

免责声明:文章转载自《sql 事务和回滚》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql——导入文本文件——用mysqlimport命令OpenGL纹理映射总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++中vector 容器的基本操作

vector是一种简单高效的容器,具有自动内存管理功能。对于大小为n的vector容器,它的元素下标是0~n-1。vector有二个重要方法:begin(): 返回首元素位置的迭代器。end(): 返回最后一个元素的下一个元素位置的迭代器。1、 vector对象创建的几种方式。1)不指定容器元素个数。vector<double> v;2)指定容...

TXC分布式事务简介

1. TXC是什么TXC(Taobao Transaction Constructor)是阿里巴巴的一个分布式事务中间件,它可以通过极少的代码侵入,实现分布式事务。 在大部分情况下,应用只需要引入TXC Client的jar包,进行几项简单配置,以及以行计的代码改造,即可轻松保证分布式数据一致性。 TXC同时提供了丰富的编程和配置策略,以适应各种长尾的应用...

sqlserver 拼接字符串分割

CREATE FUNCTION [dbo].[fnQuerySplit]( @string VARCHAR(MAX) ,--待分割字符串 @separator VARCHAR(255)--分割符 ) RETURNS @array TABLE ( item VARCHAR(255) ) AS BEGIN DE...

oracle优化的几个简单步骤

数据库优化的讨论可以说是一个永恒的主题。资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等。还有的人认为要抓出执行最慢的语句来进行优化。但实际情况是,提出疑问的人很可能根本不懂执行计划,更不要说statspack了。而我认为,数据库优化,应该首先从大的方面考虑:网络、服务器硬件配置、操作系统配置、Ora...

mysql的文件组成以及IO操作的流程

文件组成: 主要包括数据文件、索引文件、日志文件(undolog、redolog、binlog),其中undolog和redolog是innodb存储引擎所有。   IO流程: 1.InnoDB引擎使用的是 WAL 技术(write ahead log),执行事务的时候,写完内存和日志(undolog、redolog、binlog),事务就算完成了。  异...

触发器实现多表之间的增加、删除及更新

注:本文参考http://blog.sina.com.cn/s/blog_a0912d340101gxhb.html 常见的触发器有三种:分别应用于Insert,Update,Delete事件。 1.数据同步增加:如有两张表:A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的字段相对应。 1 create tr...