Я пытаюсь импортировать файл CSV, который содержит запятые и кавычки в полях, в базу данных SQL Server.В Интернете около миллиона вопросов и тем, но ни одна из них не работает.Я понял, что когда дело доходит до CSV, существуют немного другие стандарты, но SSMS, похоже, тоже не может импортировать, и я чувствую, что действительно должен быть удобный способ.
Файлысодержат строки произвольного текста, где они используют как двойные кавычки, так и запятые в полях
Вот тестовый файл CSV, который я использую:
"Value 1","Notes"
""8-pooln" grupp 7:6 To11:13","As extracted"
"""8-pooln"" grupp 7:6 To11:13","With escaped quotes"
"""""""""""8-pooln"""""""""""""""" grupp 7:6 To11:13","With loads of quotes"
Я использовал стороннюю программу для извлечения данных в CSV.Итак, первая запись - как я получил ее из этой программы.Согласно некоторым сайтам, вам нужно избегать двойных кавычек в поле, добавив еще одну двойную кавычку, это то, что вы видите в записи 2. Последняя просто содержит множество из них для тестирования.Я также использовал другое приложение для проверки файла как CSV, где проходят 2-ю и 3-ю записи.
Используя мастер импорта SSMS, я получаю:
_Value_1_,_Notes_
8-pooln" grupp 7:6 To11:13,As extracted
8-pooln"" grupp 7:6 To11:13,With escaped quotes
8-pooln"""""""""""""""" grupp 7:6 To11:13,With loads of quotes
Итак, двойные кавычки в началевсе всегда игнорируются независимо от того, сколько их.Я не нашел никаких настроек, которые могли бы изменить это вообще.
Я также пытался вручную написать команду SQL, такую как:
BULK INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n')
, которая дает нам:
Value_1,Notes
"Value 1","Notes"
""8-pooln" grupp 7:6 To11:13","As extracted"
"""8-pooln"" grupp 7:6 To11:13","With escaped quotes"
"""""""""""8-pooln"""""""""""""""" grupp 7:6 To11:13","With loads of quotes"
Он распознает только запятые и символы новой строки как любой тип управляющего символа, и, кажется, нет никаких дополнительных строк, которые можно добавить, чтобы исправить это.
Наконец, я нашел какое-то решение, в котором вы можетенапишите «файл формата», где вы можете определить разделитель столбцов для каждого столбца вручную.Что, вероятно, будет работать, но у меня есть более 50 столбцов для одного файла и около 20 файлов.
Я также нашел возможное решение в настройках мастера импорта SSMS, но оно для старой версии и, похоже, его больше не существует.
Чтобы уточнить:
- Поля содержат как запятые, так и двойные кавычки, поэтому двойные кавычки открывают и закрывают поля.Я скорее ничего не изменяю (например, из двойных в одинарные кавычки), так как не знаю точно, что означают значения.
- Существует около 20 файлов, один из которых содержит 95000 записей и более 50 столбцов.Создание форматных файлов кажется неоправданным.
- Это не так уж плохо отформатированные файлы.Интуитивно понятно, что SSMS должна иметь возможность импортировать это без каких-либо исправлений.Может быть, я могу жить с ручным редактированием CSV-файла, чтобы он соответствовал стандартам (как я сделал со 2-й записью в моем тестовом файле).
На данный момент я просто счастлив понять, почему этопросто не работает или почему моя проблема кажется уникальной.