Вызываемая хранимая процедура запускается и обновляет таблицу 2 раза вместо одного раза
Вызов хранимой процедуры
--------------------------
ЕСЛИ @ZEQUALPAY= 'ПРОСТОЙ'
НАЧАТЬ
В то время как @STARTPERIOD<=@ENDPERIOD
НАЧАТЬ
SET @CMONTH = @ZPERIOD
SET @CYEAR = @ZYEAR
Набор @начальный период: = конвертировать(тип nvarchar,@ZCCYR)+ права('00' + конвертировать(тип varchar(10),@ZCCMTH), 2)
EXEC [dbo].[sp_simple] @ZIDNO,@ZLOANUMBER,@CMONTH,@CYEAR,@RETURN
ЕСЛИ @ZPERIOD = 12
НАЧАТЬ
SET @ZCCMTH = 1
SET @ZCCYR = @ZYEAR+1
КОНЕЦ
ЕЩЁ
Если @ZPERIOD < & gt; 12
НАЧАТЬ
SET @ZCCMTH =@ZPERIOD+1
SET @ZCCYR =@ZYEAR
КОНЕЦ
SET @ZPERIOD = @ZCCMTH
SET @ZYEAR = @ZCCYR
Набор @начальный период: = конвертировать(тип nvarchar,@ZCCYR)+ права('00' + конвертировать(тип varchar(10),@ZCCMTH), 2)
КОНЕЦ
КОНЕЦ
Вызываемая Хранимая Процедура
------------------------
------------------------
ALTER PROCEDURE [dbo].[sp_simple] ( @ZIDNO Varchar(20), @ZLOANUMBER Varchar(20), @CMONTH Int, @CYEAR Int, @RETURN varchar(4) OUTPUT ) AS BEGIN DECLARE @AIDNO varchar(20), @ALOANTYPE varchar(20), @ADEDUCT money, @ATERM_START DECIMAL(22,10), @ACCNT smallint , @BINT_NO varchar(20), @BINT_NAME varchar(50), @BRATES DECIMAL(22,10) SELECT @AIDNO = A.IDNO , @ALOANTYPE = A.LOANTYPE , @ADEDUCT = A.DEDUCT , @AOUTSTAND = A.OUTSTAND , @ACOMPCOUNT = A.COMPCOUNT , @AINT_NO = A.INT_NO , @ACCNT = A.CCNT , @ASACCRUED = A.SACCRUED , @ANUMDAYS = A.NUMDAYS , @BINT_NO = B.INT_NO , @BINT_NAME = B.INT_NAME , @BRATES = B.RATES FROM LOANS A JOIN INTEREST B ON A.INT_NO = B.INT_NO WHERE REPAY_MODE='SIMPLE INTEREST' AND COMPCOUNT>=1 AND A.IDNO=@ZIDNO AND A.LOANUMBER=@ZLOANUMBER SET @ACCNT = @ACCNT+1 IF @APAY_TYPE ='MONTHLY' BEGIN IF @AMORAT_MTHS=0 AND @AMORATORIUM=0 AND @ACCNT <=@ATERM_START
Проблема
--------
@РЕЗУЛЬТАТЫ
1. Да
значение
1. 0
Программа работает вперед, следовательно, расчет
SET @ACCNT = @ACCNT+1
делается около три раза прежде чем будет достигнуто приведенное ниже условие,
тем самым побеждая условие.
SET @ACCNT в 0 со стола, как бы то ни было, прежде чем он попадет туда, где
условие для его проверки это чтение 3.
Если @AMORAT_MTHS=0 и @AMORATORIUM=0 и @ACCNT <=@ATERM_START
Как мне справиться с @RETURN, чтобы поток программы был упорядоченным?
Спасибо
Что я уже пробовал:
Примеров нет. Это своеобразная проблема
Richard Deeming
WHILE @STARTPERIOD <= @ENDPERIOD BEGIN SET @CMONTH = @ZPERIOD SET @CYEAR = @ZYEAR EXEC [dbo].[sp_simple] @ZIDNO, @ZLOANUMBER, @CMONTH, @CYEAR, @RETURN END
Так как Вы тоже никогда не обновляетесь
@STARTPERIOD
или @ENDPERIOD
в этой петле, как вы ожидаете, что он остановится?
Member 12770648
Его обновили я его не включил