我定义了以下游标:
DECLARE cursor1 FOR
SELECT BR1, REFNO1, STRTDTE, ENDDTE, PENAMT, ACCT, PRINAMT
FROM TBL1
--Temp variables are defined
DECLARE @lBr1 CHAR(3), @lREFNO1 CHAR(20), @lSTRTDTE DATETIME;
DECLARE @lENDDTE DATETIME, @lACCT CHAR(35), @lPENAMT FLOAT;
DECLARE @lPRINAMT FLOAT, @nSchdInt FLOAT
OPEN cursor1
FETCH cursor1 INTO @lBr1, @lDealNo1, @lSTRTDTE, @lENDDTE, @lACCT, @lPENAMT, @lPRINAMT
WHILE @@fetch_status = 0
BEGIN
SELECT
@nSchdIntAmt = AMT
FROM
TBL2
WHERE
REFNO1 = @lREFNO1
AND STRTDTE = @lSTRTDTE
AND ENDDTE = @lENDDTE
--IF THERE IS NO RECORD
IF @@rowcount = 0
BEGIN
INSERT INTO TBL2
SELECT * FROM TBL1
END
--If record present update following columns
ELSE
BEGIN
UPDATE TBL2
SET PRINAMT = @nSchdIntAmt,
PENAMT = @lPENAMT
WHERE
DEALNO = @lREFNO1
AND BR1 = @lBr1
END
---Fetch next rows
此光标正在处理5万行,耗时25 -30分钟。我试图在从TBL1进行列选择时提供索引,以提高性能,但没有运气。还有其他实现方式吗?