SQL Server Bulk Insert-Transaktionale?
Wenn ich führen Sie die folgende Abfrage in SQL Server 2000 Query Analyzer:
BULK INSERT OurTable
FROM 'c:\OurTable.txt'
WITH (CODEPAGE = 'RAW', DATAFILETYPE = 'char', FIELDTERMINATOR = '\t', ROWS_PER_BATCH = 10000, TABLOCK)
Auf eine text-Datei, die konform zur OurTable schema für 40 Zeilen, aber dann verpasst-format für die letzten 20 Zeilen (sagen wir die letzten 20 Zeilen haben weniger Felder), erhalte ich eine Fehlermeldung. Allerdings, die ersten 40 Zeilen sind verpflichtet, an den Tisch. Gibt es etwas über die Art und Weise bin ich Bulk Einfügen, das macht es nicht transaktional sein, oder muss ich etwas tun, explicit zu erzwingen, um rollback bei Fehler?
InformationsquelleAutor der Frage brian | 2008-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
BULK INSERT
fungiert als eine Reihe von einzelnenINSERT
Anweisungen und so, wenn der job fehlschlägt, wird es nicht zurückgesetzt alle engagierten Einsätze.Kann es jedoch sein, die innerhalb einer Transaktion, so dass Sie könnte so etwas wie dieses:
InformationsquelleAutor der Antwort Josef
Wie gesagt in der
BATCHSIZE
definition für BULK INSERT in der MSDN-Bibliothek (http://msdn.microsoft.com/en-us/library/ms188365(v=sql.105).aspx) :"Wenn dies fehlschlägt, wird der SQL Server ein commit oder ein Rollback für die Transaktion jedes Batches..."
Schluss ist nicht notwendig, um transactionality zu Bulk Insert.
InformationsquelleAutor der Antwort JG.
Können Sie ein rollback für die Einsätze . Dazu müssen wir zwei Dinge zu verstehen ersten
Sagen, Sie haben eine text-Datei, die hat 10 Zeilen und Zeile 8 und Zeile 7 hat einige ungültige Angaben . Wenn Sie Bulk Insert die Datei ohne die Angabe oder mit Angabe der batch-Größe , 8 von 10 bekommen, die in die Tabelle eingefügt. Die Ungültige Zeile ist also 8. und 7. bekommt ausgefallen und nicht eingefügt bekommen.
Dies Geschieht, weil die Standard -
MAXERRORS
count ist 10 pro Transaktion.Als Pro MSDN :
So Etwas zu scheitern, alle 10 Zeilen, auch wenn man ungültig ist, müssen wir um
MAXERRORS=1
undBatchSize=1
Hier die Anzahl der BatchSize ist ebenfalls von Bedeutung.Wenn Sie angeben, BatchSize, und die ungültige Zeile innerhalb der bestimmten charge , es wird ein rollback für die bestimmten charge nur ,nicht den gesamten Datensatz.
Seien Sie also vorsichtig bei der Auswahl dieser option
Hoffe, das löst das Problem.
InformationsquelleAutor der Antwort Sai Bhasker Raju
Versuchen, legte es in Benutzer-definierte Transaktion und sehen, was passiert. Eigentlich sollte es ein roll-back, wie du es beschrieben hast.
InformationsquelleAutor der Antwort kaiz.net