码迷,mamicode.com
首页 > 数据库 > 详细

SQLServer事务

时间:2016-04-20 18:00:55      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行
这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行

语法步骤:
开始事务:BEGIN TRANSACTION --开启事务
事务提交:COMMIT TRANSACTION --提交操作
事务回滚:ROLLBACK TRANSACTION --取消操作

--建表
CREATE TABLE [Person](
[PersonId]    NVARCHAR(100) PRIMARY KEY ,        ---主键
[PersonName] NVARCHAR(100) NULL
)
/*
    如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的
    Select * From Person
*/
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(3,Name3)
Commit TransAction

/*
    如果只有Begin TransAction和RollBack TransAction 就算没报错了,还是会回滚的
    Select * From Person
*/
--清除数据
Delete Person
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(3,Name3)
RollBack TransAction

/*
    SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效
    SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,
    用户级错误一般不会回滚整个事务
    
    Select * From Person
*/
SET XACT_ABORT ON -- 打开
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(3,Name3)
Commit TransAction
SET XACT_ABORT OFF -- 关闭

/*
    Try Catch 配合事务使用    
    Select * From Person
*/
Begin Try
    Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        Insert Into Person(PersonId,PersonName)Values(3,Name3)
    Commit TransAction
End Try
Begin Catch
    Rollback TransAction
End Catch

/*
    使用全局变量@@Error 配合事务使用    
    Select * From Person
*/
DECLARE @tran_error int;
SET @tran_error = 0;
    Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
        Insert Into Person(PersonId,PersonName)Values(1,Name1)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
        Insert Into Person(PersonId,PersonName)Values(3,Name3)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
IF(@tran_error > 0)
    BEGIN
        --执行出错,回滚事务
        ROLLBACK TransAction;
    END
ELSE
    BEGIN
        --没有异常,提交事务
        COMMIT TransAction;
    END

 

SQLServer事务

标签:

原文地址:http://www.cnblogs.com/lgxlsm/p/5413530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!