+ -
当前位置:首页 → 问答吧 → 一个事务对应多条存储过程

一个事务对应多条存储过程

时间:2011-12-06

来源:互联网

我有A,B,C,D四个存储过程,总是一起按ABCD的顺序一起执行,我能不能在A(A是查询库存数量的)里开始一个事务
CREATE PROCEDURE [A]  
(@doctorname [varchar](50), @czyname [varchar](50))
AS
BEGIN TRANSACTION tran1 --名为tran1的事务开始
INSERT INTO [yd].[dbo].[sale] ( [doctorname],[czyname]) 
VALUES ( @doctorname, @czyname)
select SCOPE_IDENTITY( ) AS djh
return
GO
然后在D里用
If @@error<>0
  If @@TranCount=1
  Rollback Transaction tran1 --中间出现事务每次要进行以此判断
else
  If @@TranCount=1
  Commit TRANSACTION tran1
结束事务。
在中间的存储过程B,C里不用再写什么代码了吗?系统会认为存储过程A,B,C,D都在事务tran1里面吗(其中存储过程C需要多次调用)?
在C/S结构里,如果1号工作站先执行存储过程A(就是先开始执行事务tran1),这时2号工作站也调用存储过程A还会执行事务tran1吗?就是同时执行事务tran1?(尽管不是同时开始,但1号工作站的tran1事务还没执行完毕,2号工作站的tran1事务也会执行吗?)

作者: oracle185   发布时间: 2011-12-06

不能

一般应该写个存储过程E,来调用ABCD
在E开始,开事务,分别调用ABCD,每个调用后检查返回状态,失败的回滚,最后提交。

作者: Haiwer   发布时间: 2011-12-06

引用 1 楼 haiwer 的回复:
不能

一般应该写个存储过程E,来调用ABCD
在E开始,开事务,分别调用ABCD,每个调用后检查返回状态,失败的回滚,最后提交。


作者: fredrickhu   发布时间: 2011-12-06

引用 1 楼 haiwer 的回复:
不能

一般应该写个存储过程E,来调用ABCD
在E开始,开事务,分别调用ABCD,每个调用后检查返回状态,失败的回滚,最后提交。

但在前台ABCD必须分开调用,A先检查库存数量,如果通过再执行B(就是我上面写的那个存储过程A的代码其实是B的)返回标识字段的值:djh,再循环调用C(每次调用都要用到B返回的djh),最后才调用D修改库存,如果把这些操作都放在一个新建的E里,那操作B是没法返回标识字段的值djh给C啊!
如果在E里一起调用ABCD,怎么解决返回标识字段的值djh的问题啊?

作者: oracle185   发布时间: 2011-12-06