Ich versuche, eine Masse von Datensätzen in SQL Server 2005 von Vb.Net einzufügen. Obwohl das Einfügen gut funktioniert, tue ich mein Bestes, um es so schnell wie möglich zu machen. Momentan dauert es ~ 11 Minuten für 100.000 Datensätze. Was wäre der vorgeschlagene Ansatz zum Einfügen einer großen Anzahl von Datensätzen in SQL Server von einer Anwendung?Mass Insert in Sql Server
Meine aktuelle Vorgehensweise ist im Grunde die Verbindung zu öffnen, durch meine Liste von Informationen iterieren und feuern einzelne SQL einfügen Statements, und dann die Verbindung zu schließen. Hat jemand einen besseren Vorschlag, wie man das macht?
Aktuelle Funktion:
Public Sub BatchInsert(ByVal ParamCollections As List(Of SqlParameter()))
Dim Conn As SqlConnection = New SqlConnection(DBHelper.DatabaseConnection)
Using scope As TransactionScope = New TransactionScope()
Using Conn
Dim cmd As SqlCommand = New SqlCommand("sproc_name", Conn)
Conn.Open()
cmd.CommandType = CommandType.StoredProcedure
For i = 0 To ParamCollections.Count - 1
cmd.Parameters.Clear()
cmd.Parameters.AddRange(ParamCollections(i))
cmd.ExecuteNonQuery()
Next
Conn.Close()
scope.Complete()
End Using
End Using
End Sub
Solange das OP ist in Ordnung mit diese Transaktionen nicht protokollieren, das ist großartig. Durch die Verwendung von BCP wird die Möglichkeit zum Zurücksetzen der Daten beseitigt (nicht wie es die meiste Zeit ohnehin ist). – StingyJack
Ich schaue jetzt in die Massenkopie. Es sieht so aus, als müsste ich meine Daten in eine DataTable konvertieren, um die Massenkopie zu nutzen. Wird der Prozess zum Erstellen und Laden der DataTable die Build-Kopie-Gewinne ausgleichen? – Nathan
Nein. Die Zeit, die zum Erstellen der Datentabelle benötigt wird, ist im Vergleich zu der Zeit, die Sie gerade ausgeben, winzig. –