关于SQL Server事务处理的一系列问题。我分有多,只要能给出详细答案,我愿按字算分。(2)

Ivony 2006-06-16 11:04:30
1、SQL Server的COMMIT TRANSACTION是不是提交所有的事务,如果事务嵌套的话,是不是应该为每一个事务指定名称而避免内层事务COMMIT提交所有事务处错。如果是这样,那么ADO.NET的BeginTransaction方法创建的事务是否具备一个唯一名称,外层ADO.NET开启一个事务调用存储过程,而存储过程内又开启一个事务会不会出问题,我测试似乎并不稳定,期待高人解答。

2、SQL Server的事务在出错的时候是不是会自动回滚?多么严重的错误会导致回滚?是不是有任何设置能让它不回滚,也就是这一点是可以完全信赖的吗?

3、我知道UPDATE/DELETE语句如果没有更新任何记录不算错误,那么如果是要求他们一定要对数据库进行操作,是否应该在这些语句前写SELECT判断是否有满足筛选条件的任何记录?还是应该在操作后判断@@ROWCOUNT?那么在之前用SELECT判断的话,事务能不能保证在执行SELECT语句到执行UPDATE/DELETE这段时间之内数据库相关的行列不会有任何改动导致SELECT的结果有可能变化?在执行完UPDATE/DELETE到判断@@ROWCOUNT之间会不会有任何因素(除了在当前事务中再执行一段UPDATE/INSERT语句)改变@@ROWCOUNT?

4、如果INSERT失败是否一定会导致事务回滚?如果不是,哪些情况会导致?

5、如果INSERT/UPDATE/DELETE操作遇到约束导致失败,会不会回滚事务?

6、如果INSERT/UPDATE/DELETE操作的触发器所进行的操作发生错误,会不会回滚事务?

7、如果操作遇到权限问题导致失败,会不会回滚事务?


最后问一个附加问题。
SQL Server要用到跨库跨服务器的事务的时候,应该用分布式事务吗?用什么分布式事务比较好?
...全文
317 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbsql 2006-07-21
  • 打赏
  • 举报
回复
1.事务可以嵌套,不会出问题
2.4.5.6.7.请参阅命令:SET XACT_ABORT { ON | OFF }
3.视你的具体应用而定
新鲜鱼排 2006-07-13
  • 打赏
  • 举报
回复
3.通过@@rowcount来获取影响到的数据数量。
4.应该是。
5.会
6.会
新鲜鱼排 2006-07-13
  • 打赏
  • 举报
回复
1.COMMIT TRANSACTION当然是开始一个,结束一个对应的。
2.使用@@error处理错误的时候,除了不恰当的位置,严重的错误会立即终止批处理语句的执行。由于批处理被终止,所以批处理后面语句的@@error得不到执行,也就无法获取出错的错误编号。
例如:select * from newid()
print @@error
提示错误是:“对象名newid无效”而不是print出来的错误结果。
addwing 2006-06-19
  • 打赏
  • 举报
回复
留念,学习,帮你顶!
Ivony 2006-06-16
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4825/4825062.xml?temp=.3495752

主贴位置,请移驾主贴做答便于申请FAQ

34,588

社区成员

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

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