0
所以這是爲了SSRS報告,所以我使用臨時表。我有兩張表,一張用於交易,我只是用它來拉帳戶和金額。第二個是我試圖根據事務進行調整的已攤銷的拖欠信息,但我遇到了語法問題。 case語句不允許與遊標或更新一起使用嗎?基於嵌套光標的更新
--Example Transaction:Account 123456 Principal 500.00 Interest 250.00
delinquent 5 months of 200 principal each month, the transaction had principal amount of 500, the first two are left alone, the third is reduced to 100 to match the total to the transaction amount, leaving a remaining amount of 0
--Delinquent data
-- 11/2015 Prin 200 Int 80 -> Prin 0 Int 0 (running total Prin 500 Int 250)
-- 10/2015 Prin 200 Int 80 -> Prin 0 Int 10 (running total Prin 500 Int 250)
-- 9/2015 Prin 200 Int 80 -> Prin 100 Int 80 (running total Prin 500 Int 240)
-- 8/2015 Prin 200 Int 80 -> Prin 200 Int 80 (running total Prin 400 Int 160)
-- 7/2015 Prin 200 Int 80 -> Prin 200 Int 80 (running total Prin 200 Int 80) <- process starts from the oldest and goes up.
這需要使用遊標,因爲我不能在一組過程,因爲它已經開始與最古老的排,調整,找到剩下的總量,再進行調整下一行。如果達到交易金額,剩餘的行將被清零。然後,我將剩餘的金額返回到交易表。
Declare TranCursor Cursor FORWARD_ONLY
For Select LoanNumber, PrincipalCollected, InterestCollected, ServiceFee, PayoffPrincipal,PayoffInterest,PayoffServiceFee
From #transFinal
FOR UPDATE OF PayoffPrincipal,PayoffInterest,PayoffServiceFee
Open TranCursor;
Fetch next from TranCursor into @TranLoan, @TranPrin, @TranInt, @TranServ, @POPrin,@POInt,@POServ
while (@@Fetch_status = 0)
Begin
--Process this individual loan's transaction by going through each set of amortized amounts starting with the oldest and reducing excess of transaction amounts to zero.
--eg. delinquent 3 months of 200 principal each month, the transaction had principal amount of 500, the first two are left alone, the third is reduced to 100 to match the total to the transaction amount
--Transaction Principal 500 Interest 250
--Delinquent data
-- 11/2015 Prin 200 Int 80 -> Prin 0 Int 0 (running total Prin 500 Int 250)
-- 10/2015 Prin 200 Int 80 -> Prin 0 Int 10 (running total Prin 500 Int 250)
-- 9/2015 Prin 200 Int 80 -> Prin 100 Int 80 (running total Prin 500 Int 240)
-- 8/2015 Prin 200 Int 80 -> Prin 200 Int 80 (running total Prin 400 Int 160)
-- 7/2015 Prin 200 Int 80 -> Prin 200 Int 80 (running total Prin 200 Int 80) <- process starts from the oldest and goes up.
Declare DelqCursor CURSOR FORWARD_ONLY
FOR select LoanNumber,DelqPrin ,DelqInt ,DelqServFee from #dq
where LoanNumber = @TranLoan
Order by PaidToDate Asc
For update OF DelqPrin, DelqInt, DelqServFee;
Open DelqCursor;
-----------------------------------------------------------------------------------------------------------
-- Processing individual row of delinquent data
-----------------------------------------------------------------------------------------------------------
Fetch next from DelqCursor into @DelqPrin, @DelqInt, @DelqServ, @DelqPTD --, @POPrin,@POInt,@POServ
while (@@Fetch_status = 0)
BEGIN
CASE when @TranPrin = 0 then set @DelqPrin = 0 -- Syntax error on case
WHEN @TranPrin >0 and @TranPrin > @DelqPrin then -- Syntax error on when
set @TranPrin = @TranPrin - @DelqPrin
set @ColPrin = @ColPrin + @DelqPrin
WHEN @TranPrin >0 and @TranPrin < @DelqPrin then
set @ColPrin = @ColPrin + @TranPrin
set @TranPrin = 0
set @DelqPrin = @DelqPrin [email protected]
end
CASE when @TranInt = 0 then set @DelqInt = 0
WHEN @TranInt >0 and @TranInt > @DelqInt then
set @TranInt = @TranInt - @DelqInt
set @ColInt = ColInt + @DelqInt
WHEN @TranInt >0 and @TranInt < @DelqInt then
set @ColInt = @ColInt + @TranInt
set @TranInt = 0
set @DelqInt = @DelqInt [email protected]
end
CASE when @TranServ = 0 then set @DelqServFee = 0
WHEN @TranServ >0 and @TranServ> @DelqServ then
set @TranServ = @TranServ - @DelqServ
set @ColServ = ColServ + @DelqServ
WHEN @TranServ >0 and @TranServ < @DelqServ then
set @ColServ = @ColServ + @TranServ
set @TranServ = 0
set @DelqServ = @DelqServ [email protected]
end
Fetch next from DelqCursor into @DelqPrin, @DelqInt, @DelqServ, @DelqPTD
End
-----------------------------------------------------------------------------------
--All rows of delinquent data for a single loan have been processed. Now we update the Payoff columns
----------------------------------------------------------------------------------
Set @PoPrin = @ColPrin
Set @PoInt = @ColInt
Set @PoServ = @ColServ
--Todo Finish update statement for outside loop to update transaction table
Close DelqCursor-- Finished with delinquent data for this loan. We close the cursor
Fetch next from TranCursor into @TranLoan, @TranPrin, @TranInt, @TranServ, @POPrin,@POInt,@POServ --Start Processing next loan
End
Close TranCursor
deallocate DelqCursor
deallocate TranCursor
我很感激任何見解,我可以弄清楚爲什麼我的情況下,當聲明給我的錯誤。我在msdn語法中沒有看到任何可以防止邏輯運行的案例。
不知道我怎麼錯過了事實,這是不是在選擇或設置。謝謝。 – xenapan