2013-04-18 44 views
11

というフォルダがあります。このフォルダーは、さまざまな.CSVファイルで構成されています。私は、SQL Serverに、これらのファイルの内容をインポートしたい複数のCSVファイルをフォルダからSQL Serverにインポートする

: フォルダの場所は、「\ダンプC」です。 私はそれを理解するために、適切なコメントと一緒に大まかなコードを欲しいです。

私はネット上で見つけたいくつかのコードを試しました。しかし、彼らは私のためにいくつかの奇妙な理由のために働いていません。私が持っていると思います


手順は

ステップ1:テーブルとコピーを通じて反復:

ステップ2にフォルダ内のすべてのファイル名をコピーします。バルクインサートを使用してファイルからのデータ。


誰かが私を助けてください。事前のおかげでたくさん:)

答えて

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

Bulk Insertを実行しようとしたときに、無効なオブジェクト名「Temp」エラーをどのように回避しましたか? – phan

+1

'Temp'はあなたが挿入しているテーブルの名前でなければなりません、それは存在しなければなりません! –

+0

@Mvision多分あなたはこの質問に私を助けることができます:) http://stackoverflow.com/questions/32862789/import-multiple-tables-into-sql-from-csv-if-existing-in-folder – KhalidN

1

ステップ1についてはたぶん、あなたは見ることができます:

http://www.sql-server-performance.com/forum/threads/copying-filenames-to-sql-table.11546/

または

How to list files inside a folder with SQL Server

、その後2

How to cast variables in T-SQL for bulk insert?

ステップ

HTH

+1

ありがとうございました。私は結局それのために働くコードを得た。 :) – SarangArd

+1

@SarangArdどうやってこれを稼働させましたか?コードを提供できますか? – MasterOfStupidQuestions

関連する問題