急.........关于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

急啊.........
为什么我第二个执行是错误的,第一个还是删除了,回滚没有起到作用,哪位高手来帮下忙.

村民应该满载而归吧。
他们呀都去祷告了,上了教堂。
因为他们没有另外的衣服
稚气未脱的你我
并想过要永远留心其动向的时尚。
一轻这个都个哈哈

在写存储过程的时候,一般我这样写

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