Вопрос по sql-server – Как создать и заполнить таблицу за один шаг в рамках операции импорта CSV?

16

Я ищу быстрый и грязный способ импортировать файлы CSV в SQL Serverwithout having to create the table beforehand and define its columns.

Каждый импортированный CSV будет импортирован в свою собственную таблицу.

Мы не обеспокоены выводом по типу данных. CSV различаются по структуре и расположению, и все они имеют много столбцов, но нас интересует только несколько из них: адреса улиц и почтовые индексы. Мы просто хотим быстро получить данные CSV в базу данных SQL и извлечь соответствующие столбцы.

Я хотел бы предоставить FieldTerminator и RowTerminator, указать его на CSV, и утилита сделает все остальное. Есть ли способ создать таблицу и заполнить ее, все за один шаг, используя BULK INSERT и / или OpenRowset (BULK ...)?

Какая версия SQL Server? John Dewey
SQL Server 2000 Tim

Ваш Ответ

2   ответа
8

у меня нет точек повторения, чтобы просто прокомментировать, поэтому я добавлю ответ, основанный на TyT (этот дескриптор выглядит ужасно в притяжательных, кстати ...)

Рабочий код нуждался в двойном & quot; \ & quot; вместо одного для меня, чтобы избежать "файл не найден" ошибка. И вам не нужно указывать поля; они будут выведены из первого ряда файла:

select *
into   CsvImportTable
from   openrowset(
           'MSDASQL',
           'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
           'select * from C:\\csvtestfile.csv')

У меня не было проблем с драйвером доступа.

ОБНОВЛЕНИЕ: Если у вас возникли проблемы с неверным выводом типов, вставьте несколько строк вверху файла с данными нужного вам типа в таблице, чтобы вы получили, скажем, текст - & gt; VARCHAR вместо text- & gt; INT, а затем удалить эти строки после импорта.

В качестве окончательного дополнения добавьте в таблицу PK, чтобы вы могли манипулировать данными - удалять фиктивные строки и т. Д .:

alter table CsvImportTable add Id int identity(1, 1)
Error: User Rate Limit Exceeded
11

Ссылка на SQLServerPediaЯ думаю, это будет работать:

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')
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Tim

Похожие вопросы