保留批量插入中的行顺序

时间:2017-08-23 13:32:58

标签: sql-server wpf vb.net tsql

我尝试从文本文件批量插入表并保留行顺序。我这样做有两个原因:

  • 我需要检查第一行是否为标题,如果是,则将其删除
  • 我正在报告"错误"(列值应该与给定内容之间的差异,即字母数字字段中的字母),并且需要告诉他们文本文件中哪一行发生了在。同时我还需要插入这些行,只是在有错误的列上使用空白值。

要进行批量插入,我首先将其插入临时表,然后将清理后的值插入主表中。但临时表似乎是随机顺序。

输入文件没有任何特定顺序,因此我无法使用order-by查询解决此问题。

关于我在这里可以做什么的任何建议?

3 个答案:

答案 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 ...