Курсор SQL Server очень медленно обновляется в каждой строке с хранимой процедурой внутри - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема, при обновлении 50k записей требуется 30 - 45 минут.Но когда я обновляю 10k записей, это занимает всего 2-3 минуты.

Как я могу исправить эту проблему?Есть ли способ улучшить его выполнение без изменения Exec ICS_GetPrincipalInterest?

Вот мой SQL-код, уже пробовал использовать операторы while, но он намного медленнее.

CREATE TABLE #getPI
(
    BranchCodeValue VARCHAR(10), 
    AccountNumberValue VARCHAR(50), 
    PrincipalReturnValue MONEY,
    InterestReturnValue MONEY, 
    ServiceFeeReturnValue MONEY, 
    PCLIReturnValue MONEY, 
    PDInterestReturnValue MONEY, 
    PDPenaltyReturnValue MONEY, 
    MRIReturnValue MONEY, 
    DSTReturnValue MONEY, 
    DefInterestReturnValue MONEY, 
    OtherChargesReturnValue MONEY, 
    ODROCRReturnValue MONEY 
) 


SELECT TOP (50000) 
    BranchCode, AccountNumber 
INTO 
    #tempLoans 
FROM
    Loans801.dbo.LoanAccount 
WHERE
    (LoanStatus NOT LIKE '%clos%' 
     AND LoanStatus NOT LIKE '%write%') 
ORDER BY 
    dategranted DESC

DECLARE @getBR VARCHAR(50) 
DECLARE @getACCNT VARCHAR(100) 
DECLARE @setCutOffDate VARCHAR(10) = CONVERT(VARCHAR(10), GETDATE(), 101) 

DECLARE @MyCursor CURSOR; 

BEGIN 
    SET @MyCursor = CURSOR FOR 
        SELECT Branchcode, accountnumber 
        FROM #tempLoans       

    OPEN @MyCursor 

    FETCH NEXT FROM @MyCursor INTO @getBR, @getACCNT 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
        INSERT INTO #getPI 
            EXEC ICS_GetPrincipalInterest @getBR, @getACCNT, @setCutOffDate 

        FETCH NEXT FROM @MyCursor INTO @getBR, @getACCNT 
    END; 

    CLOSE @MyCursor; 
    DEALLOCATE @MyCursor; 
END; 

DROP TABLE #tempLoans 

SELECT * FROM #getPI 

DROP TABLE #getPI

Спасибо взаранее!Пожалуйста, помогите мне:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...