首页 新闻 会员 周边 捐助

存储过程嵌套调用的返回

0
悬赏园豆:30 [已解决问题] 解决于 2014-12-23 19:43

几个存储过程:

A:入口存储过程,会调用 B存储过程

B:事务处理存储过程,被A调用,会调用C、D存储过程,也可能被C调用

C:事务处理存储过程,被B调用,会调用B、D存储过程

D:叶子存储过程,会被B、C调用。

 

但在执行的时候,发现返回不对,一般怎么解决?

519740105的主页 519740105 | 大侠五级 | 园豆:5810
提问于:2014-12-23 12:53
< >
分享
最佳答案
0

好久没见你回答问题了,看来最近你有点忙!

看你的问题有点像遍历二叉树,返回不对就说明abcd中至少有一个错误,

那么你就建立一个特定的树来做测试,

分别测试:

a-b

a-b-c

a-b-d

a-b-c-d

这种,就知道是哪一个存储过程出错了

收获园豆:25
刘宏玺 | 专家六级 |园豆:14020 | 2014-12-23 13:38

我再逐步调试下。

519740105 | 园豆:5810 (大侠五级) | 2014-12-23 13:45
其他回答(1)
0

你让数据库服务器情何以堪。。。好麻烦好复杂, 干嘛要这么搞, 头大了吧? 

不过, 嵌套调用, 只要正确调用了, 指定了output,  应该没什么问题。  

你可以新建一张日志表。 将失败的语句,参数等记录一下。  

我之前做过的,代码片段:

  SET @mSQLStmt = 'EXEC dbo.usp_do_TaskFinish @mHospitalId = ' + CAST(@mHospitalId AS varchar(10)) + ',@mTaskId = ' + CAST(@mTaskId AS varchar(10)) + ',@mCardNo = ' + CASE WHEN @mCardNo IS NULL THEN 'null' ELSE '''' + @mCardNo + '''' END + 
                    ',@mTaskEndTime = ' + CONVERT(varchar(19),@mTaskEndTime,120) + ',@mReturnMSG OUTPUT'
  
  SELECT @mPathId = IP.PathId
    FROM dbo.tbl_Tasks_Info T INNER JOIN dbo.tbl_ItemPaths_Info IP ON T.RelationId = IP.RelationId
   WHERE T.TaskId = @mTaskId AND T.HospitalId = @mHospitalId AND T.TaskStatus = 3
  IF (@mPathId IS NULL)
  BEGIN
     SET @mReturnMSG = '任务完成确认失败【任务信息错误】'
     INSERT INTO dbo.tbl_Operatelog_Info(logTime,SQLStmt,ReturnValue,ReturnMSG,Flag)
     VALUES (getdate(),@mSQLStmt,-1,@mReturnMSG,4) --插入日志表
     RETURN -1
  END

 

 

收获园豆:5
问天何必 | 园豆:3311 (老鸟四级) | 2014-12-23 13:08

你这个测试了,给定义了输出参数,结果还是这样。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-12-23 13:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册