У меня проблема, при обновлении 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
Спасибо взаранее!Пожалуйста, помогите мне:)