我尝试从文本文件批量插入表并保留行顺序。我这样做有两个原因:
要进行批量插入,我首先将其插入临时表,然后将清理后的值插入主表中。但临时表似乎是随机顺序。
输入文件没有任何特定顺序,因此我无法使用order-by查询解决此问题。
关于我在这里可以做什么的任何建议?
答案 0 :(得分:2)
对于要插入的表或临时表,只需要一个包含IDENTITY PROPERTY
的列create table #temp (ID int identity(1,1), otherColumn varchar(16), ...)
--do bulk insert
但是,对您来说更理想的是在源文件中创建唯一的行号。
答案 1 :(得分:0)
Using _con As New SqlConnection(ConnectionString)
_con.Open()
If Not (String.IsNullOrEmpty(Pkey)) Then
deleteTbl = "Delete from " & destTableName & " WHERE " & Pkey & " = " & PkeyId
Using cmdTable As New SqlCommand(deleteTbl, _con)
cmdTable.ExecuteNonQuery()
End Using
End If
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(_con)
bulkCopy.BulkCopyTimeout = 0
bulkCopy.BatchSize = 50000
bulkCopy.DestinationTableName = destTableName 'it is a tablename
bulkCopy.WriteToServer(sourceTable) 'sourceTable is a datatable
End Using
End Using
答案 2 :(得分:0)
创建一个带有标识列的表,然后批量插入到该表顶部的视图中,如下所示:
CREATE TABLE tb_TextFile (ID int identity(1,1), someColumn varchar(16))
GO
CREATE VIEW vw_TextFile
AS
SELECT someColumn
FROM tb_TextFile
GO
BULK INSERT vw_TextFile
FROM ...