我有以下查询:
use valid
begin transaction t1
go
delete from dbo.do
rollback transaction t1
go
使用回滚我想撤消删除操作。不要得到任何结果,有什么不对?
答案 0 :(得分:2)
在开始交易后尝试不使用“go”。
答案 1 :(得分:0)
您的查询在第一眼看上去似乎没问题,它应该没有任何问题。我尝试了类似的示例代码,如下所示,它工作正常:
use [replocal]
begin transaction t1
go
delete from dbo.ftpfilelog
rollback transaction t1
go
select * from dbo.ftpfilelog
但是如果你在DELETE语句之后有任何其他查询并且它抛出错误并且在这种情况下从未达到ROLLBACK语句,那么你的行就会消失。
你最好使用TRY..CATCH并将你的ROLLBACK放在CATCH中。如果有任何错误,它将始终回滚。
答案 2 :(得分:0)
您可以使用安全简便的代码运行100%(运行所有查询行)或不运行任何关闭
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插入行查询但是或者运行他或者没有运行任何东西和ROLLBACK
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