存储过程调用存储过程的事务控制

caijf 2005-10-10 01:56:24
大家都知道存储过程是事务嵌套的,可以进行统一提交或者回滚,但是如果在多用户的环境中,我有一个很常用的取最大值存储过程,该存储过程是对一张最大值表中,根据传入的参数,取其中某行记录的最大值,并进行+1保存。如果在多用户调用不同的存储过程处理业务(此时均有调用取最大值存储过程)时,此时发现会有将最大值表锁表现象,那这就造成处理延迟了。我希望能否做到,如果是多个存储过程调用时,如果是取最大值表中同一行记录的最大值,此时锁住该行记录,待事务提交后,其他存储过程再完成操作,但如果取的不是同一行记录的最大值,则互不影响,不要影响多用户执行的效率。
最好就是像oracl中的自治事务一样,不管外面的大事务是否完成提交或者回滚,取最大值存储过程都可以即时完成提交。
...全文
171 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
caijf 2005-10-11
  • 打赏
  • 举报
回复
来人啊,^_^
caijf 2005-10-10
  • 打赏
  • 举报
回复
我在这之前就已经试过了,不行啊。
在查询分析器中,对语句采用这种方式可以,但调用存储过程就不行了,我也感到很奇怪。
wgsasd311 2005-10-10
  • 打赏
  • 举报
回复
--存储过程局部采取事物加行锁
begin transaction
---处理你的数据
SELECT colname FROM tbname WITH (rowLOCK)
...
commit tran

caijf 2005-10-10
  • 打赏
  • 举报
回复
请大家给出意见,帮顶啊 ^_^
caijf 2005-10-10
  • 打赏
  • 举报
回复
是的,但是我更加希望是做成自治事务模式的,因为这个最大值记录就算有跳跃,也是没有关系的,关键是效率高,当然在安全的前提下。
churchatp1 2005-10-10
  • 打赏
  • 举报
回复
锁行?

34,576

社区成员

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

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