Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Import nach MSSQL

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von PeterP4LE, 9 Februar 2015.

  1. PeterP4LE

    PeterP4LE Benutzer

    Guten Tag,

    ich hoffe mir kann jemand bei meinem Problem helfen.

    Ich bekomme von einem Barcode Datensammler eine CSV Datei geliefert.

    Der Aufbau der Datei ist dabei wie folgt:

    "12";"15:01:53";"09/02/15"
    "12345685520";"10:01:57";"09/02/15"
    "12345685520";"15:01:57";"09/02/15"
    "14";"15:01:53";"09/02/15"
    "12345685520";"10:01:57";"09/02/15"
    "12345685520";"15:01:57";"09/02/15"

    Diese Daten versuche ich per BulkInsert zu importieren.
    Allerdings sind immer 3 Zeilen ein Datensatz!

    Der Aufbau der SQL Tabelle ist also
    id |id_time|id_date|pr_begin|pr_begin_time|pr_begin_date|pr_end|pr_end-time|pr_end_date|
    12|10:01:53|09/02/15|12345685520|10:01:57|09/02/15|12345685520|15:01:57|09/02/15|
    14|10:01:53|09/02/15|12345685520|10:01:57|09/02/15|12345685520|15:01:57|09/02/15|

    Ich bin leicht am verzweifeln, weil ich das einfach nicht hinbekomme.

    Kann mir jemand helfen?

    Vielen vielen Dank im Vorfeld!!

    LG

    Peter
     
  2. akretschmer

    akretschmer Datenbank-Guru

    In PG würde ich es evtl. erst einmal in eine Zwischentabelle einlesen und ab dann mit SQL arbeiten. Ich würde allerdings nicht Datum von Zeit trennen, und in PG wohl auch TSRANGE als Ziel-Datentyp nutzen.
     
  3. Distrilec

    Distrilec Datenbank-Guru

    In Oracle würde ich wahrscheinlich via PL/SQL richtig konkatenieren. Einfach nur weil ich zu faul wäre mir dafür ein passendes SQL-Statement auszudenken :)
    Wobei man einfach sowas machen könnte wie:
    Code:
    Select t1.*, t2.*, t3.*
    From (Select t.*, rownum rn
          From   import_tab t
          Order By t.id asc) t1,
          (Select t.*, rownum rn
           From   import_tab t
           Order  By t.id asc) t2,
          (Select t.*, rownum rn
           From   import_tab t
           Order  By t.id asc) t3
    Where mod(t1.rn, 3) = 0
    And   mod(t2.rn, 3) = 1
    And   mod(t3.rn, 3) = 2
    And   t1.id = t2.id
    And   t1.id = t3.id
    denke ich?!
     
    akretschmer gefällt das.
  4. akretschmer

    akretschmer Datenbank-Guru

    Genau, so in etwa dachte ich mir das. Aber da gibt es natürlich noch viele andere Wege zum Ziel...
     
  5. ukulele

    ukulele Datenbank-Guru

    Ich würde es auch im ersten Schritt so wie es ist in eine Tabelle importieren mit einem TIMESTAMP für jede Zeile. Danach läßt sich dann später sortieren um die Datensätze zusammen zu joinen. Ich kenne keinen Weg bei BULK INSERT mit 2 unterschiedlichen Trennzeichen zu arbeiten (; und Zeilenumbruch) um dann nach x Atributen einen neuen Datensatz zu beginnen. Vieleicht kann das ein gesondertes Import Tool, die hat aber nicht jeder: http://de.wikipedia.org/wiki/SQL_Server_Integration_Services

    PS: TIMESTAMP ist in MSSQL kein Datum sondern ein eigener Datentyp: http://www.sqlteam.com/article/timestamps-vs-datetime-data-types
     
  6. BerndB

    BerndB Datenbank-Guru

    Hallo,

    falls du ein Linux System zur Verfügung hast geht das auch mit sed

    cat sqldatei. sql | sed '2n;N;N;s/\n/;/g' >neue.sql

    Das hängt immer 3 Zeilen in eine und setzt noch ein Semikolon ein

    Das Ergebnis sieht dann so aus:
    "12";"15:01:53";"09/02/15"-;-"12345685520";"10:01:57";"09/02/15"-;-"12345685520";"15:01:57";"09/02/15"
    "14";"15:01:53";"09/02/15"-;-"12345685520";"10:01:57";"09/02/15"-;-"12345685520";"15:01:57";"09/02/15"

    Gruss

    Bernd
     
  7. BerndB

    BerndB Datenbank-Guru

    ups,

    da hab ich falsch kopiert, da bei mir noch eine Headline war. So sollte es gehen

    cat sqldatei. sql | sed 'N;N;s/\n/;/g' >neue.sql

    Gruss

    Bernd
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden