一篇MSSQL事务的测试文章

常用存储过程事务的基本结构

参考了该文章

---开启事务
begin tran
--错误扑捉机制,看好啦,这里也有的。并且可以嵌套。
begin try  
   --这里面写执行语句
   select * from dbo.i_UserWorkType
end try
begin catch
   if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务
      rollback tran  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。
end catch
if(@@trancount>0)
commit tran  --提交事务


测试

在此做一个测试,分别进行增删改,看能否正常回滚
未做执行前,进行的查询结果
Image

准备执行的语句 :

---开启事务
begin tran
--错误扑捉机制,看好啦,这里也有的。并且可以嵌套。
begin try  
   ----------------------
   --这三条都是正确的语句
   ----------------------
   --增
   INSERT INTO dbo.i_UserWorkType(UserNo,Calendar,WorkType,UserName,WorkTime,ChangeTime)
   VALUES('0309110122','2017-12-22','B','杨沫','8:30~17:30',GETDATE())
   
   --删除UserNo为0309110119和WorkType为B的这条数据
   DELETE dbo.i_UserWorkType
   WHERE UserNo='0309110119' AND WorkType='B'
   
   --更改数据为“李某”为“李某某”
   UPDATE dbo.i_UserWorkType
   SET UserName='李某某'
   WHERE UserName='李某'
   
   ---------------------
   --这一条是错误的语句
   ---------------------
   INSERT INTO dbo.i_UserWorkType(ChangeTime)
   VALUES('不是时间格式')
   
end try
begin catch
   if(@@trancount>0) --全局变量@@trancount,事务开启此值+1,他用来判断是有开启事务
      rollback tran  ---由于出错,这里回滚到开始,第一条语句也没有插入成功。
end catch
if(@@trancount>0)
commit tran  --提交事务



select * from dbo.i_UserWorkType

执行后的结果为:

image
与未执行前结果一样
那我们把事务去掉后,只执行Try里的语句结果会怎样呢

结果:

image
image

成功地增加了一条叫“杨沫”的数据
成功地删除了UserNo为“0309110119”和WorkType为“B”的数据
成功地更改了“李某”的数据,改成了“李某某”

结论:

这事务是有效的,并且所做的增删改都能进行回滚

原文地址:https://www.cnblogs.com/peijia/p/8473745.html