2016-07-06 13 views
2

Hier https://msdn.microsoft.com/en-us/library/ms188365.aspx Ich kann das lesen:SQL Server BULK INSERT: warum "Das FIRSTROW-Attribut soll Spaltenüberschriften nicht überspringen"?

Das firstrow Attribut nicht Spaltenüberschriften überspringen soll. Das Überspringen von Headern wird von der BULK INSERT-Anweisung nicht unterstützt. Wenn Zeilen überspringen, sucht das SQL Server-Datenbankmodul nur nach dem Feld Terminatoren und überprüft die Daten in den Feldern übersprungene Zeilen nicht.

Aber ich würde genau das tun wollen. Warum ist das nicht beabsichtigt? Kann ich irgendwelche Probleme erwarten, wenn ich Header mit FIRSTROW = 2 überspringe?

Antwort

2

der SQL Server-Datenbank-Engine

nur an dem Feldabschluss aussieht Das ist Deine Antwort. Wenn Ihre Spaltenüberschriften Namen haben, die Feldabschlusszeichen enthalten, wird das System die falsche Anzahl von Feldern in der ersten Zeile finden, und große Heiterkeit wird daher folgen. Sie können sich vorstellen, dass in allen Dateien der Welt einige Spalten als Kopfzeile

hatten. Klar genug für den Menschen, aber die Maschine hat nur Regeln.

Falls Sie nicht wissen, schlägt Ihr bulk insert im allgemeinen Fall für CSV-Dateien fehl. Das CSV-Format ist ziemlich variabel und komplexer als das, was bulk insert korrekt interpretieren kann. Insbesondere gibt es Zitatregeln, die es erlauben, Kommas in die Daten aufzunehmen. SQL Server wird die Angebote nicht berücksichtigen. Es wird das Komma trotzdem als Trennzeichen interpretieren. Wie der Mann sagt,

der SQL Server-Datenbank-Engine sieht nur auf den Feldabschluss

+1

ich es richtig verstanden habe, dass diese Antwort auf „Es meisten Fällen läuft darauf hinaus, wird es gut funktionieren, vor allem mit anythign dass ein naive Programmierer erwarten würde zu arbeiten ... es wird einfach nicht für jeden Fall funktionieren, besonders nicht für jeden Randfall, den CSV zulässt ". – Brondahl

+0

Ich würde nicht wagen zu sagen, "die meisten" CSV-Dateien sind streng durch Kommas getrennt, ohne Zitat, nein. Wenn Sie kontrollieren können, wie die CSV-Datei erstellt wird, und daher sicherstellen kann, dass keine Zitate vorkommen, hätten Sie eine bestimmte Art von CSV-Datei, die * auch * eine gültige Textdatei ist, die Komma als Trennzeichen verwendet. –

2

Es wird gut funktionieren, aber es ist die erste Zeile muss das gleiche Format (bedeutet, dass Header muss die gleiche FIELDTERMINATOR und ROWTERMINATOR haben) und wenn firstrow = 2 dann werden diese Daten aus der zweiten Zeile eingefügt werden. Beispiel, wenn ich CSV-Datei, was zu importieren und die erste Zeile Spalte meines Code-Header wie dies

wird
BULK INSERT myTable 
FROM 'C:\myTable.csv' 
WITH 
(
    FIRSTROW = 2, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
GO