none
BULK INSERT Drei-geteiltes CSV File RRS feed

  • Frage

  • Hallo Zusammen,

    wie ich mit Hilfe von BULK INSERT und einer Formatdatei ein CSV File importieren kann, habe ich mittlerweile ganz gut raus.

    Auch kann ich mit FIRSTROW bestimmen, dass die ersten Zeilen der Datei, die leider ein anderes Format aufweisen, übersprungen werden.

    Jetzt habe ich aber noch das Problem, dass nach den eigentlichen Daten nach einer Leerzeile noch Summendaten für das File kommen, die ich nicht haben will.

    Wie kann ich diese vom Import ausschließen?

    Das CSV File baut sich wie folgt auf:

    Zeile 1: 34 Spalten

    Zeile 2: leer

    Zeile 3 - x : 22 Spalten

    Zeile x+1:  Leerzeile

    Zeile x+1 bis x+y: = 7 Spalten

    Mich interessieren die Spalten 3 bis x

    Wie kann ich festlegen, dass der Import nach der zweiten leeren Zeile, bzw. wenn ich FIRSTROW = 3 setze, nach der ersten leeren Zeile beendet ist? Ich müsste wohl vor dem Import herausfinden, welche Spaltennummer die zweite leere Zeile hat. Dann kann ich BULK IMPORT sagen importiere Zeile 3-x. Aber wie kann ich das rausfinden?

    Vielen Dank für die Hilfe

    Patrick

    Samstag, 7. Februar 2015 11:30

Antworten

Alle Antworten

  • Hallo Patrick,

    sowas ist keine CSV Datei, sondern irgendwas individuell (mit sehr schlechtem Aufbau) erstelltes, was nur seiner eigenen Konvention folgt.

    Du solltest daher im Vorfeld die Datei mit einem geeigneten Tool (bspw. einer kleinen .NET Anwendung oder einem VBScript, ...) auslesen, die passenden Inhalte suchen und dann zwei oder drei Dateien draus machen, die Du dann problemlos importieren kannst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 7. Februar 2015 11:38
    Moderator
  • Leider ist der schlechte Aufbau Absicht. Man will nicht so gerne, dass diese Daten weiterverabreitet werden.

    Aber danke für den Hinweis, da muss ich wohl mal in einem VBA Forum fragen.

    Viele Grüße

    Patrick

    Samstag, 7. Februar 2015 11:47
  • Ich habe jetzt einfach alle Spalten in nur ein Feld eingelesen:

    Meine Formatdatei

    8.0
    1
    1    SQLCHAR    0    9000    "\n"    1    Zeile    ""

    Das erzeugt mir eine in SQL verarbeitbare Datenbasis. Wie kann ich diese Datenbasis jetzt nach leeren Datensätzen durchsuchen und die Datensatznummer (Zeilennummer) erhalten?

    Nochmal Danke für Hilfe

    Patrick

    Samstag, 7. Februar 2015 12:14
  • Hi,

    vorausgesetzt, die Daten wurden wirklich in der richtigen Reihenfolge importiert, würde ich der Tabelle nach dem Import eine Spalte vom Typ int mit IDENTITY Eigenschaft verpassen (oder auch schon vorher, ob dann der BULK INSERT noch geht, weiß ich allerdings grade nicht). Dann kannst Du die erste Zeile mit leerem Inhalt über:

    SELECT <IdSpalte>
    FROM   <Tabelle>
    WHERE  <Wertspalte> = ''
    raussuchen. Aber ob das wirklich so einfach ist, kann ich dir nicht sagen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 7. Februar 2015 12:20
    Moderator
  • Ich würde das gerne lösen ohne diese Übergangsdaten in eine Tabelle zu schreiben.

    Kann ich das nicht ggf. auch über eine Table-value Function lösen in der ich einen Zähler definiere?

    Samstag, 7. Februar 2015 12:32
  • Hallo Patrick,

    man kann sicher alles mögliche machen. Aber Sinn macht es IMHO keinen. Der Dateiinhalt hat eben kein ordentlich verarbeitbares Format. Da sind Krücken unausweichlich.

    Ob es über eine Funktion, ein SSIS Paket oder was anderes gehen würde, kann ich dir so nicht sagen. Da müssen dann leider andere ran. Meine Ideen und Codebeispiele hab ich dir ja geschrieben. Mehr kann ich da leider nicht tun.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Samstag, 7. Februar 2015 12:38
    Moderator
  • Hallo Patrick,

    Bist Du weitergekommen? Ist der Thread noch aktuell?

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 17. Februar 2015 12:09
    Administrator
  • Hallo Zusammen,

    ich habe das jetzt so gelöst, dass ich die Datei je Zeile als ein Datenfeld formatiere und dann über vba darin nach leeren Zeilen suche.

    Viele Grüße

    Patrick

    Dienstag, 17. Februar 2015 16:50