急.........关于SQL存储过程事务
来源:百度知道 编辑:UC知道 时间:2024/05/25 05:41:45
create proc proc_1
@tit1 varchar(10),
@tit2 varchar(10)
as
set nocount on
begin tran
delete from tab where title=@tit1
delete from tab where title=@tit2
IF @@ERROR <> 0 rollback tran
begin
print 'error'
return
end
print 'ok'
commit tran
急啊.........
为什么我第二个执行是错误的,第一个还是删除了,回滚没有起到作用,哪位高手来帮下忙.
@tit1 varchar(10),
@tit2 varchar(10)
as
set nocount on
begin tran
delete from tab where title=@tit1
delete from tab where title=@tit2
IF @@ERROR <> 0 rollback tran
begin
print 'error'
return
end
print 'ok'
commit tran
急啊.........
为什么我第二个执行是错误的,第一个还是删除了,回滚没有起到作用,哪位高手来帮下忙.
村民应该满载而归吧。
他们呀都去祷告了,上了教堂。
因为他们没有另外的衣服
稚气未脱的你我
并想过要永远留心其动向的时尚。
一轻这个都个哈哈
在写存储过程的时候,一般我这样写
begin transaction
insert....
update....
commit transaction
但是还有一种写法
大概是取得@@error之后使用rollback命令
问题时,两种方法有什么不同?各自的运行过程和结果有什么差异。第一种方法是否也会产生回滚动作
如果第二种写法取得@@error值后仅仅执行不带附加选项的rollback操作的话,与第一种写法是没有什么区别的,都会回滚的事务的开始,也就是begin transaction开始的位置。
如果在rollback中指定了回滚到某个保存点,那么肯定就跟第一种写法有区别了。我们可以在事务执行某些操作后设置一个或多个保存点,这样就可以使事务回滚到指定的保存点,而不必全部回滚。
CREATE proc proc_1
@tit1 varchar(10),
@tit2 varchar(10)
as
set nocount on
begin tran
delete from tab where title=@tit1
delete from tab where title=@tit2
IF @@ERROR <> 0
begin
rollback tran
print 'error'
return
end
ELSE
begin
commit tran
print 'ok'
end
GO