J'ai un dossier appelé"Dump".Ce dossier est constitué de divers fichiers .CSV . Le dossier est situé dans le dossier'C:\Dump'
Je veux importer le contenu de ces fichiers dans SQL Server. Je veux le code brut avec les commentaires appropriés pour que je le comprenne.
J'ai essayé quelques codes que j'ai trouvés sur le net. Mais ils n’ont pas tout à fait travaillé pour moi pour une raison étrange.
Les étapes que je voudrais avoir sont
Étape 1: Copiez tous les noms de fichiers du dossier dans une table.
Étape 2: Parcourez le tableau et copiez les données à partir des fichiers à l'aide de l'insertion en bloc.
Quelqu'un m'aider s'il vous plaît sur celui-ci. Merci beaucoup d'avance :)
--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
Pour l'étape 1, vous pouvez peut-être regarder:
http://www.sql-server-performance.com/forum/threads/copying-filenames-to-sql-table.11546/
ou
Comment lister des fichiers dans un dossier avec SQL Server
et puis étape 2
Comment convertir les variables dans T-SQL pour une insertion en bloc?
HTH
En python, vous pouvez utiliser d6tstack pour simplifier cela.
import d6tstack
import glob
c = d6tstack.combine_csv.CombinerCSV(glob.glob('*.csv'))
c.to_mssql_combine('mssql+pymssql://usr:pwd@localhost/db', 'tablename')
Voir exemples SQL . Il traite également des modifications de schéma data , crée une table et vous permet de prétraiter les données. Il utilise BULK INSERT
et devrait donc être aussi rapide.
Pour résoudre l'étape 1, xp_dirtree peut également être utilisé pour répertorier tous les fichiers et dossiers.
Gardez à l'esprit qu'il s'agit d'une fonction non documentée. Les précautions de sécurité doivent être considérées. Les noms de fichiers intentionnellement créés pourraient être un vecteur d’intrusion.