Help Me ! 存儲過程的調用問題 ?
這個問題困擾了我幾天了,望高手幫幫忙。
我後台用的是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。
我頭大了,望高手幫忙解釋解決一下,拜托!!!!!!!!!!