我尝试使用SqlBulkCopy以10个批量上传到数据库记录。某些数据已经存在于目标表中,因此,即使存在十分之一的记录,其余的也无法上传。有没有办法上传剩余的9条记录?
Try
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(conBSD)
bulkCopy.DestinationTableName = "dbo.cheques2"
' Write from the source to the destination.
bulkCopy.BulkCopyTimeout = 60
bulkCopy.WriteToServer(dtToUpload)
iSuccessInserted += 10
dtToUpload.Clear()
dtToUpload.Dispose()
MsgBox("Current " & iCurrent.ToString & " - " & " In table toUpload " )
End Using
'Duplicate key, access violation when trying to insert record with same recordID
Catch ex As SqlException When ex.ErrorCode = -2146232060
MsgBox(ex.Message & " " & ex.ErrorCode)
dtToUpload.Clear()
dtToUpload.Dispose()
Exit Try
Catch ex As Exception
MsgBox(ex.Message)
End Try
答案 0 :(得分:0)
从绩效角度看,最佳方法取决于重复的可能性。如果重复很少,您可以先尝试批量复制,然后在PK违规的情况下回退到单行条件插入或合并。
我见过一个存储过程的优秀性能,该存储过程采用IEnumerable SqlDataRecord类型的表值参数,该参数从TVP有条件地插入行。 TVP方法在内部批量将数据插入tempdb,因此它的性能非常好。如果源批处理中有重复项,则可以通过插入表变量并将其用作条件插入或合并的源来删除proc中的重复项。 TVP方法还允许您增加批量大小并显着提高性能。