Я пытаюсь импортировать некоторые данные в SQL Server 2008 с помощью массовой вставки, но получаю массу ошибок преобразования:
Сообщение 4864, Уровень 16, Состояние 1, Строка 1
Ошибка преобразования данных при массовой загрузке (несоответствие типов или недопустимый символ для указанной кодовой страницы) для строки 5902, столбца 2 (Тип).
ОК, так что обо всем по порядку:
а) данные поступают из парсера, который я встроил в C #. В этом файле есть 4 столбца, разделенных вкладками. Столбцы могут быть или не быть нулевыми. Сортировка 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
Как я уже говорил, у меня нет большого опыта работы с BCP; изначально я просто использовал
BULK INSERT KB FROM ''C:\KB.xml'' WITH (FirstRow = 1, RowTerminator = ''\n'' , FieldTerminator = ''\t'')
но это все равно не сработает. Я все еще предпочел бы использовать это вместо файла FMT; Я гуглил и попробовал несколько хитростей (например, поменять \ n на \ n \ cr или ввести вместо него код ASCII \ n).
Есть идеи? Я не могу сказать, что у меня есть я, я истощен прямо сейчас, иду спать до полудня или около того: S (сейчас 4 часа утра).
Приветствия, товарищи, спасибо и заранее
Hal
PS: Я думаю, что образцы в порядке, но, пожалуйста, будьте моим гостем и просите, что вам может понадобиться в любое время.
PS2: простите за стену текста;)