rollback的用途及使用方法

yf402 2004-09-30 04:08:27
向各位高手请教rollback的用途及使用方法,望能举例说明。
...全文
2837 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yf402 2004-10-08
  • 打赏
  • 举报
回复
首先谢谢大家的积极参与,但大家的回答大部分都可以在帮助中找到。我是希望各位能谈谈在实际应用中的一些经验和心得。比如:用rollback解决了哪些问题?或者使用rollback和不使用rollback对触发器有什么影响?
General521 2004-09-30
  • 打赏
  • 举报
回复
根据我的经验,我要补充的是
1:当rollback在:if @@error<>0后执行时将回滚整个批处理语句.
如果rollback不是在if @@error<>0后执行而是人为的执行时,只回滚rollback以前的语句,而在它后面的语句还会继续执行,因为在rollback之后将默认开始一个自动事务.
2:在事务中指定的事务名没有实际的功能,只是方便我们去阅读程序.注意:如果指定了with mark那么此事务名将作为存储在事务日志中的标记,如果需要在将来的日志恢复当中可以回滚到此事务标记点.
3:一旦在事务中使用rollback,那么你无论是否指定事务名或指定哪个事务名,它都将会回滚到事务的开始处.而不能象commit那样与最近的begin transactin 匹配,组合成嵌套的事务.
heibai520 2004-09-30
  • 打赏
  • 举报
回复
如果在 COMMIT 之后执行 ROLLBACK TRANSACTION 语句,
那么 ROLLBACK 将一直回滚到最外部的 BEGIN TRANSACTION。
以下的触发器阐明了这一点:

CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
BEGIN TRANSACTION
INSERT INTO TrigTarget
SELECT * FROM inserted
COMMIT TRANSACTION
ROLLBACK TRANSACTION

heibai520 2004-09-30
  • 打赏
  • 举报
回复 1
如果在触发器中发出 ROLLBACK TRANSACTION:

1:将回滚对当前事务中的那一点所做的所有数据修改,包括触发器所做的修改。
2:触发器继续执行 ROLLBACK 语句之后的所有其余语句。如果这些语句中的任意语句修改数据,则不回滚这些修改。执行其余的语句不会激发嵌套触发器。
3:在批处理中,不执行所有位于激发触发器的语句之后的语句。
例如:
CREATE TRIGGER TestTrig ON TestTab FOR UPDATE AS
SAVE TRANSACTION MyName
INSERT INTO TestAudit
SELECT * FROM inserted
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION MyName (回到你那个保存点的操作.就是说它以后的操作都取消)
END
gechaosa 2004-09-30
  • 打赏
  • 举报
回复
begin tran
do something
if @@error<>0 or @@rowcount
begin
rollback
retrun
end
commit
heibai520 2004-09-30
  • 打赏
  • 举报
回复
ROLLBACK TRANSACTION 清除自事务的起点或到某个保存点所做的所有数据修改。ROLLBACK 还释放由事务控制的资源。
bernice99 2004-09-30
  • 打赏
  • 举报
回复
事务回滚Transaction Rollback 是指当事务中的某一语句执行失败时将对数据库
的操作恢复到事务执行前或某个指定位置.
如:
begin transaction my_transaction_delete
use pangu
go
delete from department
where dept_id = ’1012’
update employee
set dept_id = ’1001’
where dept_id = ’1012’
if @@error!=0 or @@rowcount=0 then
begin
rollback tran after_delete /* 回滚到保存点after_deletereturn,如果使用rollback my_transaction_delete 则会回滚到事务开始前 */
commit tran
print ‘更新员工信息表时产生错误’
return
end
commit transaction my_transaction_delete
go
wangxichen 2004-09-30
  • 打赏
  • 举报
回复
数据回滚。在sql语句执行失败时,使用了此语句,可以将数据回滚到sql语句执行前的状态。
例如更新很多数据时,使用:
update ......
如果更新过程中出现错误,会导致数据混乱无法回复,
而使用了rollback:
if sql.code < 0 then 。。。
rollback。。。就可以使数据回滚

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧