在SQL中我们可以用begin transaction开始一个事件,用commit提交,用Rollback来回滚事务.
但假设我在一个存储过程中有如下三句语句
update A
update B
delect C问题1:我是否要在每个update或delete语句后面加上一个判断当前执行是否正常的操作,然后再去commit呢?
问题2:判断当前执行是否成功的语句是什么呢?
问题3: 如果我只在存储过程的最前面加上begin transaction,在最后面加上commit,那么当update B这句出错后,系统是否会整个事务回滚,还是只是回滚update B这个操作呢?
谢谢!
但假设我在一个存储过程中有如下三句语句
update A
update B
delect C问题1:我是否要在每个update或delete语句后面加上一个判断当前执行是否正常的操作,然后再去commit呢?
问题2:判断当前执行是否成功的语句是什么呢?
问题3: 如果我只在存储过程的最前面加上begin transaction,在最后面加上commit,那么当update B这句出错后,系统是否会整个事务回滚,还是只是回滚update B这个操作呢?
谢谢!
2.if @@error <> 0
return -1
BEGIN TRAN
DECLARE @s int
Set @s=0
update A
Set @s=@s+@@error
update B
Set @s=@s+@@error
delect C
Set @s=@s+@@error IF @s=0
commit tran
Else
rollback tran
2.@@error<>0
3.整个回滚
DECLARE @s int
Set @s=0
update A
Set @s=@s+@@error
update B
Set @s=@s+@@error
delect C
Set @s=@s+@@error IF @s=0
commit tran
Else
rollback tran
碰到严重错误,执行会中断而退出,事务不会被提交
问题2:判断当前执行是否成功的语句是什么呢?
执行完语句后,公用变量@@errorno=0表示无错
问题3: 如果我只在存储过程的最前面加上begin transaction,在最后面加上commit,那么当update B这句出错后,系统是
否会整个事务回滚,还是只是回滚update B这个操作呢?
事务一回滚就整个回滚。