Как создать и заполнить таблицу за один шаг в рамках операции импорта CSV?
Я ищу быстрый и грязный способ импортировать CSV файлы в SQL Server, не создавая таблицу заранее и определяя ее столбцы.
Каждый импортированный CSV будет импортирован в свою собственную таблицу.
Мы не заботимся о методах ввода данных. CSV различаются по структуре и компоновке, и все они имеют много столбцов, но нас интересуют лишь некоторые из них: уличные адреса и почтовые индексы. Мы просто хотим быстро получить данные CSV в базе данных SQL и извлечь соответствующие столбцы.
Я хотел бы предоставить FieldTerminator и RowTerminator, указать его на CSV, и утилита сделает все остальное. Есть ли способ создать таблицу и заполнить ее за один шаг, используя BULK INSERT и/или OpenRowset (BULK...)?
Ответы
Ответ 1
Ссылка на SQLServerPedia, я думаю, что это сработает:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
select TerritoryID
,TotalSales
,TotalCost
INTO CSVImportTable
from openrowset('MSDASQL'
,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
,'select * from C:\csvtest.CSV')
Ответ 2
Раздражающе, у меня нет комментариев, чтобы просто прокомментировать, поэтому я добавлю ответ на основе TyT (этот дескриптор выглядит ужасно в притяжательном, btw...)
Рабочий код должен был использовать двойной "\" вместо одного для меня, чтобы избежать ошибки "файл не найден". И вам не нужно указывать поля; они будут выведены из первой строки файла:
select *
into CsvImportTable
from openrowset(
'MSDASQL',
'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
'select * from C:\\csvtestfile.csv')
У меня не было проблем с драйвером Access.
ОБНОВЛЕНИЕ. Если у вас возникли проблемы с неверными выводами типов, вставьте несколько строк в верхней части файла с данными типа, который вы хотите в таблице, чтобы получить, скажем, текст → VARCHAR вместо text- > INT, а затем удалите эти строки после импорта.
В качестве окончательной обледенения добавьте PK в таблицу, чтобы вы могли манипулировать данными - удалите фиктивные строки и т.д.:
alter table CsvImportTable add Id int identity(1, 1)
Ответ 3
Обновленный ответ, если вы используете SQL Server Management Studio 17.
Щелкните правой кнопкой мыши База данных → Задачи → Импортировать плоский файл...
Он автоматически выведет первую строку данных в качестве имен столбцов. Следует автоматически подобрать терминаторы. Вы получите возможность установить первичные ключи, разрешив пустые значения, а также указать типы данных для столбцов.