Запятая вызывает проблему, используя BULK INSERT и формат файла - PullRequest
0 голосов
/ 04 апреля 2011

Я пытаюсь импортировать файлы .CSV, используя BULK INSERT на SQL Server и файл формата. Я создал файл формата и установил правильные терминаторы поля для каждого значения. Файл формата был правильно проверен, и я успешно импортировал некоторые тестовые данные.

Однако у меня возникла проблема при обнаружении запятых в середине цитируемого текста, например:

"SB", "7Y4386429Y0351805", "B5503", "", "Chris", 1,10, "Paypal", "Привет, извините за задержку платежа, я скоро отправлю платеж."

(пример данных)

Я установил файл формата для правильной идентификации полей, которые заключены в кавычки и не заключены в кавычки, но последнее поле имеет запятую в середине, и это создает ошибку при импорте.

У меня для FieldTerminator установлено значение ",", и я тоже пытался полностью его исключить, но не следует ли игнорировать терминатор, а не те, которые используются в файле формата?

Я не понимаю, почему запятая может привести к завершению поля, поскольку поле окружено кавычками. Это по замыслу? Конечно, запятую следует игнорировать, так как она не соответствует ни одному из терминаторов поля в файле формата?

Какие у меня варианты здесь? Данные, о которых идет речь, поступают из Paypal, поэтому у них мало шансов изменить способ экспорта.

Есть идеи?

Если это имеет значение, я показал первую часть моего файла формата ниже (настоящий файл содержит 56 строк). Все 56 строк имеют одинаковый тип данных SQLCHAR, одинаковую длину и одинаковое конечное значение.

10.0                            
56
1   SQLCHAR 0   0   "\""    0   DUMMY   SQL_Latin1_General_CP1_CI_AS                            
2   SQLCHAR 0   100 "\",\"" 1   CH  SQL_Latin1_General_CP1_CI_AS
3   SQLCHAR 0   100 "\",\"" 2   TransactionID   SQL_Latin1_General_CP1_CI_AS
4   SQLCHAR 0   100 "\",\"" 3   InvoiceID   SQL_Latin1_General_CP1_CI_AS
5   SQLCHAR 0   100 "\",\"" 4   PayPalReferenceID   SQL_Latin1_General_CP1_CI_AS

Любая помощь будет принята с благодарностью.

Спасибо

Крис.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2011

Кроме того, значение FIELDTERMINATOR, похоже, не оказывает никакого влияния, поскольку результат остается тем же самым, независимо от того, включаю ли я это значение в SQL для BULK INSERT.Поэтому я не буду указывать это, поскольку терминаторы форматного файла вступают во владение.

Хотя проблема все еще существует, и мне кажется очень странным, почему одна запятая в середине цитируемого текста вызывает поледо конца.

0 голосов
/ 04 апреля 2011

Насколько я понимаю, вы сделали все правильно - беря знания отсюда:

http://www.sqlservercentral.com/Forums/Topic18289-8-1.aspx#bm87418

По сути, замена разделителя на "\", \ "" должнахватит, так как запятая в середине, последнее поле не ",", а

Попробуйте установить первый и последний разделители как в ссылке ("\", \ "") и ("\" \ r ") и посмотрите, поможет ли это?

Или предварительно обработайте файлы и замените "," каким-нибудь мусором, например ## $ ##, и замените на. (или другим символом), а затем ## $ ##с ",", а затем импортировать? Если, конечно, в последнем поле не требуется, точка обычно помогает.

...