繁体   English   中英

无法删除临时表无效的对象名称'#Temp1'错误 - 在sql server中

[英]Can not drop a temp table Invalid object name '#Temp1' error - in sql server

我有以下代码抛出一个无效的对象名称'#Temp1'错误....

每次迭代,我截断表(DROP表也没有工作)....没有明显的跳出来作为一个问题.....感谢任何想法...

While @@Fetch_Status = 0 -- For each ObsSetCode - 
            BEGIN           

                PRINT 'I am processing the SECTION ------ ' + @dl_EventSetName
                PRINT 'I am processing the ObsSetCode ------ ' + @ObsSetList

                IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL
                BEGIN
                    TRUNCATE TABLE #Temp1
                END

                    Insert Into #Temp1 
                    Select o.EventSetName,
                           o.EventSetDisplay,
                           o.EventSetDescription,
                           o.ChildSetName,
                           ROW_NUMBER() Over (Order By o.ChildSetName) RN                  
                    From   ##ObsSetLevel o,
                           ##Final f
                    Where  f.ChildSetName = o.EventSetName and 
                           o.EventSetName = @ObsSetList 
                    Order By o.ChildSetName asc  

                    Insert into ##Final
                    Select *
                    From #Temp1
                    Where  RN = 1
                    Union
                    Select '', '', 
                           '', ChildSetName, RN
                    From #Temp1
                    Where RN > 1


                   Insert Into ##Final
                   Select distinct o.ChildSetName,
                          o.ChildSetName,
                          o.ChildSetName,
                          '',
                          ''
                   From   ##ObsSetLevel o,
                          ##Final f
                   Where f.ChildSetName = o.EventSetName and 
                         o.EventSetName = @ObsSetList     
                   Order By o.ChildSetName asc

                    PRINT @ObsSetList   
                    FETCH NEXT FROM ObsSetList_cursor Into @ObsSetList


            END

改变你选择看起来像这样:

Select o.EventSetName,
        o.EventSetDisplay,
        o.EventSetDescription,
        o.ChildSetName,
        ROW_NUMBER() Over (Order By o.ChildSetName) RN
into #Temp1                 
From   ##ObsSetLevel o,
       ##Final f
Where  f.ChildSetName = o.EventSetName and 
        o.EventSetName = @ObsSetList 
Order By o.ChildSetName asc

除非已定义表或已存在,否则不能使用Insert Into

你不是在任何地方创建#Temp

  • 如果找到,请删除该表。
  • 使用第一个SELECT创建表。

请尝试以下方法:

While @@Fetch_Status = 0 -- For each ObsSetCode - 
BEGIN           

    PRINT 'I am processing the SECTION ------ ' + @dl_EventSetName
    PRINT 'I am processing the ObsSetCode ------ ' + @ObsSetList

    IF OBJECT_ID('tempdb..#Temp1') IS NOT NULL
    BEGIN
        DROP TABLE #Temp1  /* DROP THE TABLE IF IT IS FOUND */
    END

        Select o.EventSetName,
               o.EventSetDisplay,
               o.EventSetDescription,
               o.ChildSetName,
               ROW_NUMBER() Over (Order By o.ChildSetName) RN                  
        Into   #Temp1 /* Create the table with your SELECT */
        From   ##ObsSetLevel o,
               ##Final f
        Where  f.ChildSetName = o.EventSetName and 
               o.EventSetName = @ObsSetList 
        Order By o.ChildSetName asc  
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM