2009-04-16 3 views
1

Я пытаюсь импортировать некоторые данные в SQL Server 2008 с помощью Bulk Insert, но я получаю кучу ошибок преобразования:SQL ошибка Bulk Insert 4863

Msg 4864, Level 16, State 1, Строка 1 Ошибка преобразования данных массовой загрузки (несоответствие типа или недопустимый символ для указанной кодовой страницы) для строки 5902, столбец 2 (Тип).

ИТАК Первые вещи сначала:

а) данные поступают из синтаксического анализа я построил в C#. В этом файле есть 4 столбца, разделенных вкладками. Столбцы могут быть или не иметь значения null. Сортировка - UTF-8. Вот выдержка из этого.

D00486 DBLinks PubChem 7847552 
D00486 DBLinks LigandBox D00486 
**D00487 Name  Pyridostigmine bromide (JP15/USP/INN)** -- WORKS 
D00487 Name  Mestinon (TN) 
D00487 Chemical 260.016 C9H13N2O2. Br 
D00487 Target PATH:hsa00564(43) 
D00487 Remark  Therapeutic category: 1239 
D00487 Remark  ATC code: N07AA02 
D00487 Pathway PATH: map07220 Cholinergic and anticholinergic drugs 
D00487 DBLinks CAS 101-26-8 
D00487 DBLinks PubChem 7847553 
D00487 DBLinks DrugBank DB00545 
D00487 DBLinks LigandBox D00487 
**D00488 Name  Pyrimethamine (JAN/USP/INN)** -- DOES **NOT** WORK! 
D00488 Name  Daraprim (TN) 

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

б) Это то, что я использую для создания таблицы:

CREATE TABLE [dbo].[KB] ([BEName] [nvarchar](1000) NOT NULL, [Type] [nvarchar](1000) NULL, [Name] [nvarchar](1000) NULL, [Value] [nvarchar](1000) NULL) ON [PRIMARY] 

с) Это то, что я сейчас использую для импорта данных из файла:

DECLARE @SQL nvarchar(4000) 
SET @SQL = 'BULK INSERT KB FROM ''C:\KB.xml'' WITH (FirstRow = 1, FORMATFILE = ''C:\out_KB.fmt'')'; 
EXEC(@SQL) 

Мне пришлось вручную генерировать файл fmt, потому что по какой-то причине BCP не смог подключиться к моей базе данных (все еще разрабатывая основы для нее ...), поэтому возможно, что это не так, как должно быть. В любом случае, вот это содержание:

9.0 
4 
1 SQLCHAR 0 100 "" 1 BEName SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 500 "\t" 2 Type SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 500 "\t" 3 Name SQL_Latin1_General_CP1_CI_AS 
4 SQLCHAR 0 500 "\n" 9 Value SQL_Latin1_General_CP1_CI_AS 

Как я уже отмечалось ранее, я не имеют большого опыта работы с ППГ; первоначально я просто использовал

BULK INSERT KB FROM ''C:\KB.xml'' WITH (FirstRow = 1, RowTerminator = ''\n'' , FieldTerminator = ''\t'') 

но все равно это не сработало. Я бы предпочел использовать это вместо файла FMT; Я googled и попробовал пару трюков (например, замена \ n с \ n \ cr или введение кода ASCII \ n вместо).

Любые идеи? Я не могу сказать, что у меня есть, я сейчас исчерпал себя, просыпаюсь до полудня или что-то в этом роде: S (сейчас здесь 4 часа ночи).

Приветствия товарищи, спасибо и заранее Hal

PS: Я думаю, что образцы хорошо, но, пожалуйста, будь моим гостем и просить то, что вам может понадобиться в любое время. PS2: Извините за стену с текстом;)

ответ

1

Файлы для вставки большого объема в XML не очень богаты. Я посмотрел на тебя и не вижу проблемы, но легко пропустить проблемы.

Файлы с объемной загрузкой XML намного проще в работе. Можете ли вы реорганизовать свой код для создания XML-вставных файлов? Я также обнаружил, что вы должны также использовать файлы формата XML при использовании файлов вставки XML, а BCP не создаст их для вас - вы сами должны сами написать свой файл формата XML, но это довольно просто.

+0

Хорошо, спасибо. Мне нужно будет его реализовать когда-нибудь, сейчас мне удалось импортировать данные через GUI задачи. Еще раз спасибо –

2

Старый поток, но для записи, я считаю, проблема была связана с файлом формата OP. Он не указывает разделитель для первой строки.Оно должно быть:

9.0 
4 
1 SQLCHAR 0 100 **"\t"** 1 BEName SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 500 "\t" 2 Type SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 500 "\t" 3 Name SQL_Latin1_General_CP1_CI_AS 
4 SQLCHAR 0 500 "\n" 9 Value SQL_Latin1_General_CP1_CI_AS 

... без звездочек.

Файлы из систем Windows обычно нуждаются в «\ r \ n» для окончательного терминатора.

+0

Спасибо за вход, даже если поздно :) –