Импорт файла CSV с помощью команды BULK INSERT в таблицу SQL Server

У меня есть файл CSV, в котором есть несколько столбцов данных.

Файл CSV выглядит так

поле1: Тест1
поле2: Тест2
поле3: Тест3, Тест4, Тест5

В этом случае, какую библиотеку я могу использовать в качестве терминатора поля, я имею в виду, если я использую этот запрос для вставки файла CSV в таблицу shopifyitem, поскольку вы предполагаете, что поле данных вставлено неправильно

BULK INSERT shopifyitem
FROM 'c:\test.csv'
WITH
(
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n'
)

Итак, какой терминатор поля я могу использовать?

Огромное спасибо заранее....


person Max    schedule 29.01.2013    source источник
comment
Мне это совсем не похоже на файл CSV. Это должно быть Test1,Test2,"Test3,Test4,Test5"   -  person Aaron Bertrand    schedule 30.01.2013
comment
@AaronBertrand: хотя Bulk Insert тоже не разбирается правильно.   -  person RBarryYoung    schedule 30.01.2013
comment
@RBarryYoung right, я не предполагал, что этот формат будет волшебным образом работать, просто то, что OP имеет сейчас не CSV. В любом случае, когда у вас есть дурацкий формат, встроенные запятые и т. Д., Вам нужно либо изменить формат, либо использовать что-то еще - SSIS, предварительный анализатор, BCP с файлом формата и т. Д. Трудно сказать наверняка, потому что я все еще не думаю, что то, что мы видим в вопросе, - это именно то, как выглядит файл.   -  person Aaron Bertrand    schedule 30.01.2013
comment
@AaronBertrand, к сожалению, в Sql Server не встроено ничего, которое могло бы правильно анализировать CSV с полями в кавычках, а не BCP с файлом формата, даже SSIS. Лучшее, что вы можете сделать, - это использовать SQLBulkCopy самостоятельно или импортировать строки в виде необработанного текста в NVarchar (MAX), а затем проанализировать их с помощью настраиваемого SQL. Извините, для меня это больно ...   -  person RBarryYoung    schedule 30.01.2013
comment
Пожалуйста, опубликуйте образец данных, которые вы пытаетесь вставить. Как прокомментировал Аарон Бертран, ваши данные не в формате CSV. Также включите DDL для таблицы, в которую вы вставляете.   -  person Tony    schedule 16.01.2014
comment
Возможный дубликат stackoverflow.com/questions/782353/   -  person mas_oz2k1    schedule 17.04.2014


Ответы (3)


Я не думаю, что вы сможете импортировать этот формат без предварительной обработки. Как намекнул Аарон, это не стандартный CSV-файл.

Если вам не удается переформатировать файл, есть несколько способов перевести данные в импортируемый формат:

http://www.timmitchell.net/post/2013/01/14/ragged-flat-file-processing-in-ssis/

http://www.rad.pasfu.com/index.php?/archives/38-Script-Component-as-Source-SSIS.html

http://msdn.microsoft.com/en-us/library/ms136060.aspx (прокрутите вниз до «Пример исходного файла»)

Все это решения SSIS, которые используют .NET для основной части работы. Я предпочитаю SSIS просто из-за встроенных инструментов повышения производительности. Это можно сделать с помощью любого текстового процессора, такого как консольное приложение или сценарий PowerShell (если у вас действительно есть время).

Я предпочитаю исходный код компонента сценария с потоковым ридером, но у Тима Митчелла есть интересная альтернатива.

person brian    schedule 30.01.2013
comment
Я не могу понять, как сервер sql не может импортировать файл идеально для Excel, в то время как «БЕСПЛАТНЫЙ» mysql может! - person dvdmn; 22.01.2014

Попробуйте использовать:
ROWTERMINATOR = '0x0a'

person hassam    schedule 16.01.2014
comment
Спасибо за символ новой строки, я не мог найти его нигде, кроме переполнения стека - person hram908; 19.08.2019

Это код для импорта текста или файла CSV в базу данных:

String SQL = "BULK INSERT [staging_db].[dbo].[TEST] FROM 'D:\\test.txt' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')";
person milan.s    schedule 17.06.2013