标题:请教怎样使用事务中的rollback命令
只看楼主
studentabc
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2005-3-4
 问题点数:0 回复次数:7 
请教怎样使用事务中的rollback命令
  我知道这是个比较简单的问题,可是我不会啊,又没人教我,恳请各位帮忙,最好给个例子
  我想知道:在begin tran 和 commit tran之间的几条sql语句执行时有一条出现了错误,想回滚到begin tran之前的状态,即相当于没执行任何一条sql语句。
  怎么做?
搜索更多相关主题的帖子: rollback 事务 命令 
2005-04-20 15:39
EA_Games
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:539
专家分:0
注 册:2005-3-13
得分:0 
BEGIN TRANSACTION  my_transaction_delete

USE  database_name
GO

DELETE FROM table_name WHERE table_column='XXX'

SAVE TRANSACTION after_delete                    --设定保存点

UPDATE table_name SET table_column='XXXX' WHERE table_column='XXXXX'

IF @@ERROR!=0  OR @@ROWCOUNT=0 THEN
BEGIN
           ROLLBACK TRANSACTION after_delete       /*回滚到保存点after_delete,如果使用
                                                                                    rollback my_transaction_delete   则会回滚到事务前*/              
           PRINT '更新出错'
END

COMMIT TRANSACTION my_transaction_delete               
GO

2005-04-20 20:14
studentabc
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2005-3-4
得分:0 
谢谢楼上的朋友,太感谢了!

2005-04-21 21:43
EA_Games
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:539
专家分:0
注 册:2005-3-13
得分:0 
不用客气,欢迎常来SQL SERVER坐坐,一起学习。

2005-04-21 22:31
studentabc
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2005-3-4
得分:0 
还有个问题,当transaction中的一条命令出错时,使用了rollback,但下面的命令还是会继续执行,我希望在一个命令出错后整个事务都取消,该条出错语句后的命令都不执行,应该怎么写啊?

2005-04-22 09:21
EA_Games
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:539
专家分:0
注 册:2005-3-13
得分:0 
那你所有的事务都回滚,然后结束事务就可以了。

ROLLBACK TRANSACTION after_delete       /*回滚到保存点after_delete,如果使用
                                                                 rollback my_transaction_delete   则会回滚到事务前*/


(参考上例)            

2005-04-22 23:13
studentabc
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2005-3-4
得分:0 
  结束事务?可以在未执行下面的sql语句的情况下中断事务的执行吗,像函数里的exit sub 一样,命令怎么写啊。
  如果中间某条命令出错,而后来的都正确,那么后来@@error变量的值还是等于0的啊,在最下面的代码中怎么判断中间的语句出现了错误呢?
  麻烦你了,请告诉我该怎么做。
抵制日货,支持!!从我做起

2005-04-23 14:18
erhan
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-3-26
得分:0 

不知道正经应该怎么做,不过你把后续语句放到那个IF的ELSE里,应该就可以了。呼呼 。

2006-03-26 18:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-16179-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.521888 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved