SQL SERVER- 事务 transaction 处理和回滚常见用法

最近在做.net 项目中,遇到了一些bug,发现有些是数据库,如sql server 中的存储过程异常出错引起的,asp.net 中可以用c#的标准 catch 语法抛出异常,但是建议 存储过程,只有又复杂 insert,update等语句的地方,都加入 transaction 写法,错误的话可以回滚事务,保持数据的完整性,一致性。

语法很简单,凡事系统,或者手动判断的地方,加入 Begin TransAction,Commit TransAction,Rollback TransAction

事务定义:

事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据更改均会

提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有

数据更改均被清除。

事务三种运行模式:
自动提交事务
每条单独的语句都是一个事务。
显式事务
每个事务均以 BEGIN TRANSACTION 语句显式开始,
 COMMIT  ROLLBACK 语句显式结束。
隐性事务
在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT  ROLLBACK 语句

显式完成。

事务操作的语法:

BEGIN TRANSACTION
BEGIN DISTRIBUTED TRANSACTION
COMMIT TRANSACTION
COMMIT WORK
ROLLBACK WORK
SAVE TRANSACTION
BEGIN TRANSACTION

注意:BEGIN TRANSACTION 标记一个显式本地事务的起始点。
BEGIN TRANSACTION @@TRANCOUNT  1

BEGIN TRANSACTION 代表一点,由连接引用的数据在该点是逻辑和物理上都一致的。如果遇上错误,在 BEGIN TRANSACTION 之后的所有数据改动都能进行回滚,以将数据返回到已知的一致状态 。每个事务继续执行直到它无误地完成并且用 COMMIT TRANSACTION 对数据库作永久的改动,或者遇上错误并且用 ROLLBACK TRANSACTION 语句擦除所有改动

常用sql server 中的代码段:


declare @Result nvarchar(500) 
begin
	begin try 
		Begin TransAction
			update table1 set name = ''
			if exists( select * from a where name ='abc')
				set @Result = @Result + N''
			if @Result <>''  
				Rollback TransAction  --強制拋送
			else
				Commit TransAction
	end  try 
	BEGIN CATCH
		Rollback TransAction
		set @Result = N'數據庫錯誤,請重新試試';
	END CATCH
	SELECT 'Result' = @Result;  --輸出給web顯示具體的錯誤原因
end

 

 

作者: 轻烟随风
当前文章地址: https://www.zyxpp.com/sqltransaction/
来源: 轻烟随风的博客
文章版权归作者所有,欢迎转载
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭