34,576
社区成员
发帖
与我相关
我的任务
分享
create table trantest (a int)
go
create proc p_trantest
as
begin tran
insert into trantest select 1
if @@error<>0 rollback tran
waitfor delay '00:00:30'
insert into trantest select 2
if @@error<>0 rollback tran
commit tran
exec p_trantest
--在存储过程为执行结束之前,点查询分析器的取消
--这样,表trantest就被锁住了
select * from trantest
--因为被锁住,不会有返回结果
create proc p_trantest
as
SET XACT_ABORT ON --打开此选项
begin tran
insert into trantest select 1
if @@error<>0
begin
print 'failure'--修改后(原存储过程是要求出错之后写日志的)
rollback tran
end
waitfor delay '00:00:30'
insert into trantest select 2
if @@error<>0
begin
print 'failure'
rollback tran
end
commit tran
create table trantest (a int)
go
create proc p_trantest
as
SET XACT_ABORT ON --打开此选项
begin tran
insert into trantest select 1
if @@error<>0 rollback tran
waitfor delay '00:00:30'
insert into trantest select 2
if @@error<>0 rollback tran
commit tran
if @@TRANCOUNT >0
rollback tran
楼主在这种情况下执行一下
rollback tran
强行退出就行了