2013-04-18 10 views
11

Ich habe einen Ordner namens "Dump." Dieser Ordner besteht aus verschiedenen .CSV-Dateien. Der Ordner Lage ist 'C: \ Dump'Importieren Sie mehrere CSV-Dateien zu SQL Server von einem Ordner

ich den Inhalt dieser Dateien in SQL Server importieren möchten. Ich möchte den groben Code zusammen mit den richtigen Kommentaren, damit ich es verstehe.

Ich habe ein paar Codes ausprobiert, die ich im Internet gefunden habe. Aber aus irgendeinem seltsamen Grund haben sie sich nicht für mich entwickelt.


Die Schritte Ich mag würde haben sind

Schritt 1: Kopieren Sie alle Dateinamen in dem Ordner, in einer Tabelle

Schritt 2: Iterate durch den Tisch und kopieren die Daten aus den Dateien mit Bulk Insert.


Jemand bitte helfen Sie mir auf diesem einen. Vielen Dank im Voraus :)

Antwort

30
--BULK INSERT MULTIPLE FILES From a Folder 

    --a table to loop thru filenames drop table ALLFILENAMES 
    CREATE TABLE ALLFILENAMES(WHICHPATH VARCHAR(255),WHICHFILE varchar(255)) 

    --some variables 
    declare @filename varchar(255), 
      @path  varchar(255), 
      @sql  varchar(8000), 
      @cmd  varchar(1000) 


    --get the list of files to process: 
    SET @path = 'C:\Dump\' 
    SET @cmd = 'dir ' + @path + '*.csv /b' 
    INSERT INTO ALLFILENAMES(WHICHFILE) 
    EXEC Master..xp_cmdShell @cmd 
    UPDATE ALLFILENAMES SET WHICHPATH = @path where WHICHPATH is null 


    --cursor loop 
    declare c1 cursor for SELECT WHICHPATH,WHICHFILE FROM ALLFILENAMES where WHICHFILE like '%.csv%' 
    open c1 
    fetch next from c1 into @path,@filename 
    While @@fetch_status <> -1 
     begin 
     --bulk insert won't take a variable name, so make a sql and execute it instead: 
     set @sql = 'BULK INSERT Temp FROM ''' + @path + @filename + ''' ' 
      + '  WITH ( 
        FIELDTERMINATOR = '','', 
        ROWTERMINATOR = ''\n'', 
        FIRSTROW = 2 
       ) ' 
    print @sql 
    exec (@sql) 

     fetch next from c1 into @path,@filename 
     end 
    close c1 
    deallocate c1 


    --Extras 

    --delete from ALLFILENAMES where WHICHFILE is NULL 
    --select * from ALLFILENAMES 
    --drop table ALLFILENAMES 
+0

Wie haben Sie den ungültigen Objektnamen 'Temp' Fehler bekommen, wenn Sie versuchen, die Massen einfügen? – phan

+1

'Temp' muss der Name der Tabelle sein, in die Sie einfügen, es muss existieren! –

+0

@Mvision vielleicht können Sie mir bei dieser Frage helfen :) http://stackoverflow.com/questions/32862789/import-multiple-tables-into-sql-from-csv-if-existing-in-folder – KhalidN

1
+1

Danke für die Hilfe. aber ich habe schließlich einen Code bekommen, der dafür funktioniert. :) – SarangArd

+1

@SarangArd Wie hast du das funktioniert? Können Sie Code bereitstellen? – MasterOfStupidQuestions

Verwandte Themen