日期:2014-05-18  浏览次数:20429 次

一个事务对应多条存储过程
我有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事务也会执行吗?)

------解决方案--------------------
不能

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


------解决方案--------------------
既然它们总是在一起调用,那你把它写在一个存储过程里就行了.然后,你就能用一个事务了.
------解决方案--------------------
事务只能在一个存储过程中,不能跨存储过程