在SQL回滚事务中,它从哪里回滚状态?我的意思是存储数据的位置,以便回滚可以恢复数据。
发布于 2016-04-05 04:26:24
对于Oracle,它在提交之前将更改保存在重做日志中。每个RDMS都有自己的策略。
发布于 2018-01-04 19:47:56
您可以使用安全而简单的代码来运行100% (运行所有查询行)或不运行任何查询行
|查询1| = like insert into或select or ... |行数|=关闭查询的数量
DECLARE @rowcount int set @rowcount = 0 ;
BEGIN TRANSACTION [Tran1]
BEGIN TRY
<Query 1> ; set @rowcount = (@rowcount + @@ROWCOUNT);
<Query 2> ; set @rowcount = (@rowcount + @@ROWCOUNT);
...
IF @rowcount = <count of lines>
COMMIT TRANSACTION[Tran1]
ELSE
ROLLBACK TRANSACTION[Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION[Tran1]
END CATCH
例如,这段代码运行2,insert into into行查询,但是运行所有的him,或者不运行任何东西,然后回滚
DECLARE @rowcount int set @rowcount = 0 ;
BEGIN TRANSACTION [Tran1]
BEGIN TRY
insert into [database].[dbo].[tbl1] (fld1) values('1') ;
set @rowcount = (@rowcount + @@ROWCOUNT);
insert into [database].[dbo].[tbl2] (fld1) values('2') ;
set @rowcount = (@rowcount + @@ROWCOUNT);
IF @rowcount = 2
COMMIT TRANSACTION[Tran1]
ELSE
ROLLBACK TRANSACTION[Tran1]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION[Tran1]
END CATCH
https://stackoverflow.com/questions/36412207
复制相似问题