当前位置:Gxlcms > 数据库问题 > SQLServer事务

SQLServer事务

时间:2021-07-01 10:21:17 帮助过:4人阅读

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事务

标签:

人气教程排行