SQL Сценарий Server Management Studio для BULK INSERT всех TXT-файлов с разделителями табуляции в папке - PullRequest
0 голосов
/ 19 марта 2020

У меня в папке .txt файлы с разделителями табуляции c:\some\random\folder\.

Структура файла двух примеров файлов выглядит следующим образом:

c:\some\random\folder\test1.txt:

name   month   speed  column_1
kate   jan     1            
kate   jan     4           

c:\some\random\folder\test2.txt:

name   month   speed  value  column_20
mike   jan     1      10
mike   jan     9      20

Я хочу создать таблицу, которая выглядит следующим образом

name   month   speed  value
---------------------------
kate   jan     1            
kate   jan     4 
mike   jan     1      10
mike   jan     9      20 

Я пытался сделать следующее

--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:\some\random\folder\'
SET @cmd = 'dir ' + @path + '*.txt /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 '%.txt%'

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 = ''\t'', 
               ROWTERMINATOR = ''\n'', 
               FIRSTROW = 2 
            ) '

    PRINT @sql
    EXEC (@sql)

Пока что полученная ошибка может показаться тривиальной:

Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 2, столбца 4 (столбец_1).

Однако я считаю, что это связано с фундаментальной ошибкой в мой подход.

...