| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 648 人关注过本帖
标题:请教怎样使用事务中的rollback命令
收藏  订阅  推荐  打印 
studentabc
Rank: 2
等级:注册会员
帖子:41
积分:510
注册:2005-3-4
请教怎样使用事务中的rollback命令

  我知道这是个比较简单的问题,可是我不会啊,又没人教我,恳请各位帮忙,最好给个例子
  我想知道:在begin tran 和 commit tran之间的几条sql语句执行时有一条出现了错误,想回滚到begin tran之前的状态,即相当于没执行任何一条sql语句。
  怎么做?
搜索更多相关主题的帖子: rollback  事务  命令  
2005-4-20 15:39
EA_Games
Rank: 4
等级:高级会员
威望:6
帖子:539
积分:5990
注册:2005-3-13

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-4-20 20:14
studentabc
Rank: 2
等级:注册会员
帖子:41
积分:510
注册:2005-3-4

谢谢楼上的朋友,太感谢了!

2005-4-21 21:43
EA_Games
Rank: 4
等级:高级会员
威望:6
帖子:539
积分:5990
注册:2005-3-13

不用客气,欢迎常来SQL SERVER坐坐,一起学习。

2005-4-21 22:31
studentabc
Rank: 2
等级:注册会员
帖子:41
积分:510
注册:2005-3-4

还有个问题,当transaction中的一条命令出错时,使用了rollback,但下面的命令还是会继续执行,我希望在一个命令出错后整个事务都取消,该条出错语句后的命令都不执行,应该怎么写啊?

2005-4-22 09:21
EA_Games
Rank: 4
等级:高级会员
威望:6
帖子:539
积分:5990
注册:2005-3-13

那你所有的事务都回滚,然后结束事务就可以了。

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


(参考上例)            

2005-4-22 23:13
studentabc
Rank: 2
等级:注册会员
帖子:41
积分:510
注册:2005-3-4

  结束事务?可以在未执行下面的sql语句的情况下中断事务的执行吗,像函数里的exit sub 一样,命令怎么写啊。
  如果中间某条命令出错,而后来的都正确,那么后来@@error变量的值还是等于0的啊,在最下面的代码中怎么判断中间的语句出现了错误呢?
  麻烦你了,请告诉我该怎么做。
抵制日货,支持!!从我做起

2005-4-23 14:18
erhan
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2006-3-26

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

2006-3-26 18:04
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.053409 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved