У меня в папке .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).
Однако я считаю, что это связано с фундаментальной ошибкой в мой подход.