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/
来源: 轻烟随风的博客
文章版权归作者所有,欢迎转载
共有 0 条评论