--BULK INSERT MULTIPLE FILES From a Folder 
--a table to loop thru filenames drop table ALLFILENAMES
DECLARE @ALLFILENAMES TABLE (
	WHICHPATH VARCHAR(255)
	, WHICHFILE VARCHAR(255)
	)

--TRUNCATE TABLE ALLFILENAMES

--some variables 
DECLARE @filename VARCHAR(255)
	, @path VARCHAR(255)
	, @sql VARCHAR(8000)
	, @cmd VARCHAR(1000)

--get the list of files to process:
-- The path is server specific, e.g. PAWHERSCAPE C Drive, etc
SET @path = 'C:\DUMP\'
SET @cmd = 'dir ' + @path + '*.csv /b'

--select @cmd
INSERT INTO @ALLFILENAMES (WHICHFILE)
EXEC Master..xp_cmdShell @cmd

--select @cmd
UPDATE @ALLFILENAMES
SET WHICHPATH = @path
WHERE WHICHPATH IS NULL

--SELECT * FROM @ALLFILENAMES
--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:
	--First Row skips headers if using firstrow = 2
	-- Replace source table with required
	SET @sql = 'BULK INSERT [EDW].[dbo].[stg_ds_ftclfp_710_extract] FROM ''' + @path + @filename + ''' ' + '     WITH ( 
                   FIELDTERMINATOR = '','', 
                   ROWTERMINATOR = ''\n'', 
                   FIRSTROW = 1 
                ) '

	PRINT @sql

	EXEC (@sql)

	FETCH NEXT
	FROM c1
	INTO @path
		, @filename
END

CLOSE c1

DEALLOCATE c1

 

Share This Via: