"Dump。"というフォルダーがあります。このフォルダーはさまざまな.CSVファイルで構成されています。フォルダーの場所は 'C:\ Dump'
これらのファイルの内容をSQL Serverにインポートします。私はそれを理解できるように、適切なコメントとともに大まかなコードが必要です。
ネットで見つけたコードをいくつか試しました。しかし、奇妙な理由で彼らは私のためにうまく機能していません。
私がしたいステップは
ステップ1:フォルダー内のすべてのファイル名をテーブルにコピーします
ステップ2:テーブルを反復処理し、一括挿入を使用してファイルからデータをコピーします。
誰かがこれについて私を助けてください。事前に感謝します:)
--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
pythonでは d6tstack を使用できます。
import d6tstack
import glob
c = d6tstack.combine_csv.CombinerCSV(glob.glob('*.csv'))
c.to_mssql_combine('mssql+pymssql://usr:pwd@localhost/db', 'tablename')
SQLの例 を参照してください。また、 データスキーマの変更 を扱い、テーブルを作成して、データを前処理できます。 BULK INSERT
ですので、同じくらい速くなければなりません。
手順1を解決するには、xp_dirtreeを使用してすべてのファイルとフォルダーを一覧表示することもできます。
文書化されていない関数であることを覚えておいてください。セキュリティ上の注意事項を考慮する必要があります。意図的に作成されたファイル名は、侵入ベクトルである可能性があります。
sarangArdの回答を拡張するには、ファイル名がテーブル名と一致する場合、tempを次のように置き換えます。
' + Left(@filename, Len(@filename)-4) + '