我寫了一個游標,我在其中使用游標從表中獲取值并在另一個表中更新這些值。在測驗時,我分析了值存盤在表中并且更新也在作業,因為 sql server 訊息顯示 1 行已更新,但游標中的值沒有在該表中更新我很困惑,無法得到任何答案
DECLARE
@R_AGE$PATIENT_SEQ_NUM numeric,
@R_AGE$PATIENT_TOTAL_BAL DECIMAL(18,2),
@R_AGE$INS_TOTAL_BAL DECIMAL(18,2),
@R_AGE$PAT_CURRENT_AMOUNT DECIMAL(18,2),
@R_AGE$PAT_ABOVE_30 DECIMAL(18,2),
@R_AGE$PAT_ABOVE_60 DECIMAL(18,2),
@R_AGE$PAT_ABOVE_90 DECIMAL(18,2),
@R_AGE$PAT_ABOVE_120 DECIMAL(18,2),
@R_AGE$INS_CURRENT_AMOUNT DECIMAL(18,2),
@R_AGE$INS_ABOVE_30 DECIMAL(18,2),
@R_AGE$INS_ABOVE_60 DECIMAL(18,2),
@R_AGE$INS_ABOVE_90 DECIMAL(18,2),
@R_AGE$INS_ABOVE_120 DECIMAL(18,2)
DECLARE
GET_AGE CURSOR LOCAL FOR
SELECT
T_PATIENT_AMOUNT_AGE.PATIENT_SEQ_NUM,
T_PATIENT_AMOUNT_AGE.PATIENT_TOTAL_BAL,
T_PATIENT_AMOUNT_AGE.INS_TOTAL_BAL,
T_PATIENT_AMOUNT_AGE.PAT_CURRENT_AMOUNT,
T_PATIENT_AMOUNT_AGE.PAT_ABOVE_30,
T_PATIENT_AMOUNT_AGE.PAT_ABOVE_60,
T_PATIENT_AMOUNT_AGE.PAT_ABOVE_90,
T_PATIENT_AMOUNT_AGE.PAT_ABOVE_120,
T_PATIENT_AMOUNT_AGE.INS_CURRENT_AMOUNT,
T_PATIENT_AMOUNT_AGE.INS_ABOVE_30,
T_PATIENT_AMOUNT_AGE.INS_ABOVE_60,
T_PATIENT_AMOUNT_AGE.INS_ABOVE_90,
T_PATIENT_AMOUNT_AGE.INS_ABOVE_120
FROM T_PATIENT_AMOUNT_AGE
where patient_seq_num=4366999
OPEN GET_AGE
FETCH next from GET_AGE
INTO
@R_AGE$PATIENT_SEQ_NUM,
@R_AGE$PATIENT_TOTAL_BAL,
@R_AGE$INS_TOTAL_BAL,
@R_AGE$PAT_CURRENT_AMOUNT,
@R_AGE$PAT_ABOVE_30,
@R_AGE$PAT_ABOVE_60,
@R_AGE$PAT_ABOVE_90,
@R_AGE$PAT_ABOVE_120,
@R_AGE$INS_CURRENT_AMOUNT,
@R_AGE$INS_ABOVE_30,
@R_AGE$INS_ABOVE_60,
@R_AGE$INS_ABOVE_90,
@R_AGE$INS_ABOVE_120
while @@FETCH_STATUS = 0
BEGIN
UPDATE PATIENT_PROF
SET
PATIENT_TOTAL_BAL = @R_AGE$PATIENT_TOTAL_BAL,
INS_TOTAL_BAL = @R_AGE$INS_TOTAL_BAL,
PATIENT_CURRENT_AMT_DUE = @R_AGE$PAT_CURRENT_AMOUNT,
ABOVE_30 = @R_AGE$PAT_ABOVE_30,
ABOVE_60 = @R_AGE$PAT_ABOVE_60,
ABOVE_90 = @R_AGE$PAT_ABOVE_90,
ABOVE_120 = 5000,
INS_CURRENT_AMT_DUE = @R_AGE$INS_CURRENT_AMOUNT,
INS_ABOVE_30 = @R_AGE$INS_ABOVE_30,
INS_ABOVE_60 = @R_AGE$INS_ABOVE_60,
INS_ABOVE_90 = @R_AGE$INS_ABOVE_90,
INS_ABOVE_120 = @R_AGE$INS_ABOVE_120
WHERE PATIENT_PROF.SEQ_NUM = 4366999
FETCH next from GET_AGE
INTO
@R_AGE$PATIENT_SEQ_NUM,
@R_AGE$PATIENT_TOTAL_BAL,
@R_AGE$INS_TOTAL_BAL,
@R_AGE$PAT_CURRENT_AMOUNT,
@R_AGE$PAT_ABOVE_30,
@R_AGE$PAT_ABOVE_60,
@R_AGE$PAT_ABOVE_90,
@R_AGE$PAT_ABOVE_120,
@R_AGE$INS_CURRENT_AMOUNT,
@R_AGE$INS_ABOVE_30,
@R_AGE$INS_ABOVE_60,
@R_AGE$INS_ABOVE_90,
@R_AGE$INS_ABOVE_120
END
CLOSE GET_AGE
DEALLOCATE GET_AGE
uj5u.com熱心網友回復:
我不清楚你為什么會遇到麻煩,但這真的不需要游標(幾乎沒有什么需要,除了一些非常小眾的場景,它們很慢而且很難編碼)。
你可以直接加入更新
UPDATE pp
SET
PATIENT_TOTAL_BAL = pae.PATIENT_TOTAL_BAL,
INS_TOTAL_BAL = pae.INS_TOTAL_BAL,
PATIENT_CURRENT_AMT_DUE = pae.PAT_CURRENT_AMOUNT,
ABOVE_30 = pae.PAT_ABOVE_30,
ABOVE_60 = pae.PAT_ABOVE_60,
ABOVE_90 = pae.PAT_ABOVE_90,
ABOVE_120 = 5000,
INS_CURRENT_AMT_DUE = pae.INS_CURRENT_AMOUNT,
INS_ABOVE_30 = pae.INS_ABOVE_30,
INS_ABOVE_60 = pae.INS_ABOVE_60,
INS_ABOVE_90 = pae.INS_ABOVE_90,
INS_ABOVE_120 = pae.INS_ABOVE_120
FROM PATIENT_PROF pp
JOIN T_PATIENT_AMOUNT_AGE pae ON pae.patient_seq_num = pp.SEQ_NUM
WHERE pp.SEQ_NUM = 4366999;
您可以洗掉WHERE以在整個表上運行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460697.html
上一篇:向資料添加最大值和大小寫?
下一篇:CTE中的自定義排序順序
