Bulk insert from multiple csv + encoding

MSSQL

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;