【发布时间】:2014-10-04 09:56:20
【问题描述】:
我正在使用批量复制到临时表,然后将用于合并到主表。一切正常,但是当我尝试删除临时表时,我收到一条错误消息,提示“表 '#temptable' 不存在”
基本上我会做以下事情。
'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
就像我说的,一切似乎都在工作,除了丢了桌子。这是否意味着临时表已自动删除?
我尝试运行一些测试并四处搜索,但没有运气。
【问题讨论】:
-
您是否能够构建一个 short 但 complete 示例来演示该问题?目前,“代码”中显然缺少一些内容,它们实际上可能很重要。但是如果不能自己获取这段代码并运行它,就很难说清楚。它不一定是真正的代码 - 只是显示实际问题的东西(即在将样本编辑到您的问题之前检查自己是否确实具有行为)
-
我编辑并添加了更多真实代码。我可能会关闭连接,这应该会清除 TMVector 建议的所有临时表?
标签: sql asp.net vb.net winforms temp-tables