这两中事务写法有什么不同

wisdom369 2004-04-02 11:44:22
BEGIN TRAN T1
UPDATE table1 ...
BEGIN TRAN M2 WITH MARK
UPDATE table2 ...
SELECT * from table1
COMMIT TRAN M2
UPDATE table3 ...
COMMIT TRAN T1


BEGIN TRAN T1
UPDATE table1 ...
--BEGIN TRAN M2 WITH MARK
UPDATE table2 ...
SELECT * from table1
--COMMIT TRAN M2
UPDATE table3 ...
COMMIT TRAN T1
有什么不同吗
...全文
50 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wisdom369 2004-05-07
  • 打赏
  • 举报
回复
在一下操作中,有什么办法可以在exec出错的情况下回滚T1的所有操作


BEGIN TRAN T1

UPDATE t set b = '6'
exec('UPDATE t set c = 1')

SELECT * from t

COMMIT TRAN T1
laughsmile 2004-04-10
  • 打赏
  • 举报
回复
加上需要在BEGIN TRAN T1之前加上SET XACT_ABORT ON,才能实现:出现异常,执行回滚.
如果不加上这条语句,并不执行回滚.
加上这条语句之后,才会:
在第一种写法中
如果M2中出现异常,是否只回滚M2中的所有操作,而T1中的其他部分继续执行
在第二种写法中
如果T1中的任何一步操作出现异常,则T1中的所有操作将全部回滚

wisdom369 2004-04-02
  • 打赏
  • 举报
回复
在第一种写法中
如果M2中出现异常,是否只回滚M2中的所有操作,而T1中的其他部分继续执行
在第二种写法中
如果T1中的任何一步操作出现异常,则T1中的所有操作将全部回滚
是吗?
progress99 2004-04-02
  • 打赏
  • 举报
回复
定義事務點主要是為了回滾到指定位置用的,樓主你未用到回滾,故就你的代碼而言沒什麼區別
ropriest 2004-04-02
  • 打赏
  • 举报
回复
一中有两个事务在控制
二中则只有一个事务在控制,
yun198183 2004-04-02
  • 打赏
  • 举报
回复
没有多大区别
zjcxc 元老 2004-04-02
  • 打赏
  • 举报
回复
单这个语句没什么质的区别
realgz 2004-04-02
  • 打赏
  • 举报
回复
1、写法不同,后者多了注释符:)
2、前者有利于分部分控制事务
netcoder 2004-04-02
  • 打赏
  • 举报
回复
两段代码做用是一样的
因为在代码中没有回滚操作
所以,只要一步有错,全部操作都回滚

34,590

社区成员

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

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