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

请帮助我是 SQL 新手

4

2 回答 2

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;
于 2012-11-30T05:49:07.650 回答
1

我可以看到三点:

  • 您正在创建表#INSTL_PLAN_TEMP,而下一条语句正在删除它。
  • 而且,我认为在光标中你应该使用 #INSTL_PLAN_TEMP而不是 INSTL_PLAN_TEMP
  • 光标应定义为@INSTL_PLAN_CUR CURSOR

注意:感谢 Mohit 指出。

-米林德

于 2012-11-30T05:47:52.017 回答