SQL Server 2005 - проблемы массовой вставки - PullRequest
0 голосов
/ 01 ноября 2010

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

Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 2, столбца 4 (тип).

BULK INSERT dbo.BobTable FROM 'C:\DataFiles\Bob.txt' 
WITH (FIELDTERMINATOR = '","', FIRSTROW=2,ROWTERMINATOR = '\n',DATAFILETYPE='char')

Есть идеи?

"id","altid","altid2","type"    
123456789.00,"ABC1234","ABC1234","R"

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

CREATE TABLE [dbo].[BOB](
  [id] [nvarchar](50) NULL,
  [Altid] [nvarchar](50) NULL,
  [Altid2] [nvarchar](50) NULL,
  [type] [nvarchar](50) NULL
)

1 Ответ

2 голосов
/ 01 ноября 2010

Массовая вставка плохо справляется с обработкой кавычек и запятых без помощи файла формата. Вам нужно будет создать или сгенерировать его, а затем сослаться на него с помощью Bulk Insert.

В вашем примере первое поле заканчивается ,", а не ",", поэтому SQL считает, что поле слишком длинное.

Вот хорошая отправная точка: Создание файла формата

И этот пример применения файла формата, в котором также есть пример вашей проблемы: Использование файла формата для массового импорта данных

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

Кроме того, вы можете использовать SSIS для любой из этих работ? Службы SSIS могут обрабатывать файлы с кавычками и разделителями-запятыми НАМНОГО меньше, чем файлы формата BCP. Если у вас есть возможность, я полностью рекомендую ее.

...