Sql 表'#诱人的';从代码隐藏执行drop table[#TENTABLE]时不存在

Sql 表'#诱人的';从代码隐藏执行drop table[#TENTABLE]时不存在,sql,asp.net,vb.net,winforms,temp-tables,Sql,Asp.net,Vb.net,Winforms,Temp Tables,我正在使用一个临时表的bulkcopy,该临时表将用于合并到主表。一切正常,但当我尝试删除临时表时,会出现一个错误,即“table”#tentable“不存在” 基本上我做了以下几点 'get data from excel to a datatable. Dim cmd As New OleDbCommand(sqlstring, excelConnection) dt.Load(cmd.ExecuteReader()) 'creat

我正在使用一个临时表的bulkcopy,该临时表将用于合并到主表。一切正常,但当我尝试删除临时表时,会出现一个错误,即“table”#tentable“不存在”

基本上我做了以下几点

        'get data from excel to a datatable.
   Dim cmd As New OleDbCommand(sqlstring, excelConnection)
        dt.Load(cmd.ExecuteReader())  

        'create sql connection
  Using sqlcon As SqlConnection =
            New SqlConnection(ConfigurationManager.ConnectionStrings("SQLCON").ConnectionString)
                sqlcon.Open()
                'create temp table
                Dim sqlcmd As New SqlCommand("create table #tbltemp (ID int, FirstName nvarchar(50),LastName nvarchar(50),JobDesc nvarchar(50))", sqlcon)
                sqlcmd.ExecuteNonQuery()
                Try
                'start bulcopy
                    Using bulkcopy As SqlBulkCopy = New SqlBulkCopy(sqlcon)

                        'map columns
                        Dim mapID As New SqlBulkCopyColumnMapping("ID", "ID")
                        bulkcopy.ColumnMappings.Add(mapTMID)
                        Dim mapFName As New SqlBulkCopyColumnMapping("FirstName", "FirstName")
                        bulkcopy.ColumnMappings.Add(mapFName)
                        Dim mapLName As New SqlBulkCopyColumnMapping("LastName", "LastName")
                        bulkcopy.ColumnMappings.Add(mapLName)
                    End Using 'end bulkcopy using
                    'Inserts new records to main from temptable
                    Dim mergesql As String = "merge into dbo.Main as Target " & _
                              "using #tbltemp as Source " & _
                              "on " & _
                              "(Target.ID = Source.ID) " & _
                              "when not matched then " & _
                              "insert (ID,FirstName,LastName) values (Source.ID,Source.FirstName,Source.LastName);"
                    sqlcmd.CommandText = mergesql
                    sqlcmd.ExecuteNonQuery()
                    'Clean up stuff
                      cmd.CommandText = "DROP TABLE [#tbltemp]"
                      cmd.ExecuteNonQuery()


                Catch ex As Exception
                    Response.Write(ex.Message)
                Finally
'close sql con
                    sqlcon.Close()

                End Try
                'close excel con
                excelConnection.Close()
            End Using ' end using sqlcon
就像我说的,除了把桌子放下,一切似乎都在运转。这是否意味着临时表已自动删除


我试着做了一些测试,四处搜索,但没有成功

SQL Server将在连接关闭时自动删除临时表,因此您实际上不需要这样做


不知道为什么它在下降部分失败。您可能没有正确的权限。

cmd是与excelconnection关联的OLEDBC命令,而不是与数据库连接关联的SqlCommand

顺便说一句,我一直在使用这种技术,您也可以创建临时表作为

Select Top 0 * Into #tbltemp From dbo.Main
在静态CREATETABLE语句中定义列时,此保存

另外,如果您在同一个连接中经常使用临时表,那么您可以检查它是否存在,并使用

If Object_Id('TempDB..#tbltemp') Is Not Null Drop Table #tbltemp

您是否能够构建一个简短但完整的示例来演示问题?目前,“代码”中显然缺少一些位,它们可能实际上很重要。但是,如果我们不能够自己使用这些代码并运行它,就很难判断。它不一定是真正的代码——只是一些显示实际问题的东西(即,在将样本编辑到问题中之前,检查您自己是否确实有这种行为),我编辑并输入了更多的真实代码。我可能只是关闭连接,这应该像TMVector建议的那样清除所有临时表?