12. 4. 2023
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 = 'D:\Path\To\Folder\';
SET @cmd = 'dir ' + @path + '*.csv /b';
INSERT INTO ALLFILENAMES (WHICHFILE) EXEC master..xp_cmdshell @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:
SET @sql =
'BULK INSERT CSV_TableName FROM ''' + @path + @filename + ''' '
+ ' WITH (
CODEPAGE = ''65001'',
FIELDTERMINATOR = '';'',
ROWTERMINATOR = ''\n'',
FIRSTROW = 2
) ';
PRINT @sql;
EXEC (@sql);
FETCH NEXT FROM c1
INTO
@path
,@filename;
END;
CLOSE c1;
DEALLOCATE c1;
DROP TABLE ALLFILENAMES;