Help Me ! 存儲過程的調用問題 ?

richardwong 2003-08-18 03:23:56
這個問題困擾了我幾天了,望高手幫幫忙。
我後台用的是sql server 2000.
我在前台調用了一個存儲過程,代碼如下:
Integer li_Return = 0
String ls_AcctCode = ""

gc_userconnect.uf_begintransaction()

Declare lmsp_StartAC Procedure For msp_StartAC
@ti_Return = :li_Return Output, @ts_AcctCode = :ls_AcctCode Output Using gc_userconnect ;
Execute lmsp_StartAC ;
Fetch lmsp_StartAC Into :li_Return ;
Close lmsp_StartAC ;

If li_Return = 0 Then
Commit Using gc_userconnect ;
Else
Rollback Using gc_userconnect ;
Endif
後台存儲過程的代碼簡略如下:
CREATE PROCEDURE dbo.msp_StartAc
( @ti_Return Integer = 0 Output,
@ts_AcctCode Varchar(10) = '' Output
)
AS

Declare @ld_SDAmt Decimal(18,2), @ld_SCAmt Decimal(18,2), @ld_ADAmt Decimal(18,2), @ld_ACAmt Decimal(18,2)
Set @ld_SDAmt = 0
Set @ld_SCAmt = 0
Set @ld_ADAmt = 0
Set @ld_ACAmt = 0

Select @ld_SDAmt = Sum(Open_CDAmt), @ld_SCAmt = Sum(Open_CBAmt),
@ld_ADAmt = Sum(Accu_DbAmt), @ld_ACAmt = Sum(Accu_CBAmt)
From Ac_Init
If @ld_SDAmt <> @ld_SCAmt Or @ld_ADAmt <> @ld_ACAmt
Begin
Set @ti_Return = 1
Return
End
.......
.......
Insert Into Acperamt (Acct_Code, Period, dr_amt, cr_amt, b_dr_amt, b_cr_amt)
Values (@ls_AcctCode, @ls_Period, @ld_SDAmt, @ld_SCAmt, @ld_SDBAmt, @ld_SCBAmt)
If @@Error <> 0 Set @ti_Return = 99
......
......
Return
現在的我有幾個疑問是:
當存儲過程在If @ld_SDAmt <> @ld_SCAmt Or @ld_ADAmt <> @ld_ACAmt出錯時,
pb能夠用li_Return得到其返回的值1,進行正確處理。但是當存儲過程在If @@Error <> 0 Set @ti_Return = 99出錯時(由於變量值的錯誤插入了主鍵重復的記錄),pb就不能用li_Return得到其返回的值99,而是其初始值0,好像存儲過程執行
成功了。???????
如果我更改pb的代碼如下Integer li_Return = 99,此時我也修正了存儲過程,能夠
正確執行完成了,應該返回的值是0,但pb得到的li_Return還是其初始值99。
我頭大了,望高手幫忙解釋解決一下,拜托!!!!!!!!!!




...全文
32 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiyousyc 2003-08-19
  • 打赏
  • 举报
回复
If @@Error <> 0
begin
Set @ti_Return = 99
return
end
richardwong 2003-08-19
  • 打赏
  • 举报
回复
我用了上面的代碼,效果一樣。應該不是這個問題

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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