Announcement

Collapse
No announcement yet.

Importieren von CSV Dateien in MS SQL Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Importieren von CSV Dateien in MS SQL Server

    Hallo zusammen.

    Ich möchte Zeilen aus einer CSV Datei in eine Datenbank Tabelle einfügen. Die CSV Datei sieht z.B. so aus:

    AlarmLogID;DateOn;DateOff;Value1
    4649;14.07.2006 13:56:14;14.07.2006 14:04:25;

    In der ersten Zeile stehen die Spaltennamen.

    Jetzt meine eigentliche Frage. Wie kann ich die einzelnen elemente so casten, dass sie mit dem Datentyp im meiner Tabelle übereinstimmen. Dabei muss bei einem leeren Eintrag in der CSV Datei ein NULL in die DB Tabelle eingetragen werden.
    Ich hab versucht über INSERT den Datensatz einzutragen.
    Die Datentypen bekomme ich über eine SQL Abfrage als String Array

    z.B.
    Int, DateTime, DateTime, float (passend zum oberen Beispiel)

  • #2
    Hallo Marco,

    ich würde in zwei Schritten vorgehen. Zuerst den Import in eine "unkritische" Textspalten-Tabelle durchführen, um dann in die richtigen Typen umzuwandeln.
    Code:
    create table #TestTab
    (
    	AlarmLogID int null
    	, DateOn datetime null
    	, DateOff datetime null
    	, Value1 float null
    )
    --
    create table #Import 
    (
    	AlarmLogID varchar(100) null
    	, DateOn varchar(100) null
    	, DateOff varchar(100) null
    	, Value1 varchar(100) null
    )
    
    bulk insert #Import from 'c:\test.txt' with(fieldterminator=';', firstrow=2)
    
    insert into #TestTab(AlarmLogID, DateOn, DateOff, Value1)
    select 
    	AlarmLogID
    	, substring(DateOn,7,4) + substring(DateOn,4,2) + substring(DateOn,1,2) + substring(DateOn,11,9)
    	, substring(DateOff,7,4) + substring(DateOff,4,2) + substring(DateOff,1,2) + substring(DateOff,11,9)
    	, cast(Value1 as float)  --oder wenn deutsches Format cast(replace(Value1, ',', '.') as float)
    from #Import
    
    select * from #TestTab
    
    drop table #Import
    drop table #TestTab
    Gruß
    Olaf

    Comment


    • #3
      Hallo,

      ich kenne mich mit MS-SQL nicht aus. Dort soll es aber dafür BulkCopy geben; suche einmal nach diesem Stichwort. Jürgen

      Comment

      Working...
      X