SqlServer 1.5

--概要:SqlService常用语句[事务]

--设计者:DuanXuWen

--版本:0.1

--修改者:

--修改时间:

 

--Begin Transaction:标记事务开始。

--Commit Transaction:事务已经成功执行,数据已经处理妥当。

--Rollback Transaction:数据处理过程中出错,回滚到没有处理之前的数据状态,或回滚到事务内部的保存点。

--Save Transaction:事务内部设置的保存点,就是事务可以不全部回滚,只回滚到这里,保证事务内部不出错的前提下。

--xact_abort on/off , 指定是否回滚当前事务,为on时如果当前sql出错,回滚整个事务,为off时如果sql出错回滚当前sql语句,其它语句照常运行读写数据库。

--需要注意的时:xact_abort只对运行时出现的错误有用,如果sql语句存在编译时错误,那么他就失灵啦。

CREATE TABLE #table1

(

Id INT IDENTITY(1,1), --主键自增

Name VARCHAR(20),--名字

Age INT --年龄

)

 

--①事务---------------------------------------------

 

--开启事务

BEGIN TRAN

--错误机制

BEGIN TRY 

INSERT INTO #table1 VALUES('哈哈',16)

INSERT INTO #table1 VALUES('嘻嘻','出错')

INSERT INTO #table1 VALUES('呵呵',18)

END TRY

BEGIN CATCH

SELECT

Error_number() AS ErrorNumber,  --错误代码

Error_severity() AS ErrorSeverity,  --错误严重级别,级别小于10 try catch 捕获不到

Error_state() AS ErrorState ,  --错误状态码

Error_Procedure() AS ErrorProcedure , --出现错误的存储过程或触发器的名称。

Error_line() AS ErrorLine,  --发生错误的行号

Error_message() AS ErrorMessage  --错误的具体信息

IF(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务

BEGIN

ROLLBACK TRAN  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。

END

END CATCH

IF(@@trancount>0)

BEGIN

COMMIT TRAN  --如果成功#table1表中,将会有3条数据。

END

SELECT * FROM  #table1

--②事务[保存点]---------------------------------------------

--开启事务

BEGIN TRAN

--错误机制

BEGIN TRY 

INSERT INTO #table1 VALUES('哈哈',16)

--保存点

SAVE TRAN onesucceeds

INSERT INTO #table1 VALUES('嘻嘻',17)

INSERT INTO #table1 VALUES('呵呵',18)

END TRY

BEGIN CATCH

SELECT

Error_number() AS ErrorNumber,  --错误代码

Error_severity() AS ErrorSeverity,  --错误严重级别,级别小于10 try catch 捕获不到

Error_state() AS ErrorState ,  --错误状态码

Error_Procedure() AS ErrorProcedure , --出现错误的存储过程或触发器的名称。

Error_line() AS ErrorLine,  --发生错误的行号

Error_message() AS ErrorMessage  --错误的具体信息

IF(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务

BEGIN

ROLLBACK TRAN  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。

END

END CATCH

IF(@@trancount>0)

BEGIN

ROLLBACK TRAN  onesucceeds--#table1表中,将会有1条数据。

END

SELECT * FROM  #table1

--③事务[指定是否回滚当前事务]---------------------------------------------

set xact_abort OFF

--开启事务

BEGIN TRAN

INSERT INTO #table1 VALUES('哈哈',16)

INSERT INTO #table1 VALUES('嘻嘻',12345646879783213)

INSERT INTO #table1 VALUES('呵呵',18)

--提交事务

COMMIT TRAN

SELECT * FROM  #table1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值