2012-11-30 100 views
1

我創建一個臨時表在存儲過程是這樣的:如何使用臨時表在存儲過程中

IF OBJECT_ID('#INSTL_PLAN_TEMP') IS NULL 
BEGIN 
    CREATE TABLE #INSTL_PLAN_TEMP(P_LOAN_ID INT, 
            P_RECOVERY_TYPE VARCHAR(1), 
            P_SEQ_NO INT, 
            P_FROM_INSTL_NO INT) 

    DROP TABLE #INSTL_PLAN_TEMP 
END 

之後,我在此表上創建一個遊標像

DECLARE INSTL_PLAN_CUR CURSOR FOR 
    SELECT P_RECOVERY_TYPE, P_LOAN_ID, P_SEQ_NO, P_FROM_INSTL_NO 
    FROM INSTL_PLAN_TEMP 
    WHERE P_LOAN_ID = @I_LOAN_ID 
    ORDER BY P_LOAN_ID, P_SEQ_NO; 

但在遊標聲明它顯示錯誤

無效的對象名稱INSTL_PLAN_TEMP

plz幫助我新的SQL

+1

你忘了''#在你的表名*前(我假設你聲明和使用的創建和刪除語句之間的光標)。在旁註中,很少需要使用遊標。我們沒有足夠的信息來給你選擇,但基於集合的方法**更快**。 –

+0

臨時表不需要'Create TABLE' .. – dotNETbeginner

+0

plz給我備用解決方案 – user1831355

回答

1

三點,我可以看到:

  • 您所創建的表#INSTL_PLAN_TEMP和你都在不斷下降很下一條語句。
  • 而且,我覺得在光標,你應該使用#INSTL_PLAN_TEMP,而不是INSTL_PLAN_TEMP
  • 光標應該被定義爲@INSTL_PLAN_CUR CURSOR

注:感謝莫希特的指出。

-Milind

+1

另外,遊標的聲明不正確。 聲明如下: DECLARE @INSTL_PLAN_CUR CURSOR –

+0

@MohitPandey:是的。 Marc_s:感謝您的編輯。 –

1

我認爲這是行不通的:

IF OBJECT_ID('#INSTL_PLAN_TEMP') IS NULL 

如果我沒有記錯的話這將是這樣的:

IF OBJECT_ID('tempdb..#INSTL_PLAN_TEMP') IS NULL 

爲什麼創建後降?

DROP TABLE #INSTL_PLAN_TEMP 

這是正確的聲明:

DECLARE @INSTL_PLAN_CUR CURSOR FOR 
    SELECT P_RECOVERY_TYPE, P_LOAN_ID, P_SEQ_NO, P_FROM_INSTL_NO 
    FROM #INSTL_PLAN_TEMP 
    WHERE P_LOAN_ID = @I_LOAN_ID 
     ORDER BY P_LOAN_ID, 
       P_SEQ_NO; 
+0

@marc_c,更正,謝謝。 –

+0

thnx很多............... – user1831355

相關問題