如何在存储过程中使用临时表

时间:2012-11-30 05:39:42

标签: sql-server stored-procedures

我正在这样的存储过程中创建一个临时表:

 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 help我是SQL的新手

2 个答案:

答案 0 :(得分:1)

我可以看到三点:

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

注意:感谢Mohit指出。

-Milind

答案 1 :(得分: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;