SQL批量插入错误4863
我想通过批量插入的方式导入一些数据到SQL Server 2008,但我已经得到一吨的转换错误:SQL批量插入错误4863
消息4864,级别16,状态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)
倒数第二排产生像我以前出你的错误消息。 真正让我感到惊讶的是,我放在粗体中的另一条线非常相似,但不会产生任何错误。
B)这是我用来创建表的内容:
CREATE TABLE [dbo].[KB] ([BEName] [nvarchar](1000) NOT NULL, [Type] [nvarchar](1000) NULL, [Name] [nvarchar](1000) NULL, [Value] [nvarchar](1000) NULL) ON [PRIMARY]
C)这就是我目前使用从文件导入数据:
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 \ cr替换\ n或者改为引入\ n的ASCII码)。
任何想法?我不能说我没有,我现在筋疲力尽,一直睡到中午或某事:S(现在是凌晨4点)。
干杯队友,感谢并提前 哈尔
PS:我认为样品是好的,但请我的客人,并要求你可能需要在任何时间什么。 PS2:对不起墙上的文字;)
非XML批量插入文件非常挑剔。我看着你的,并没有看到问题,但很容易错过问题。
XML批量插入文件更易于使用。你能重构你的代码来生成XML批量插入文件吗?我还发现,在使用XML插入文件时,您还必须使用XML格式的文件,BCP不会为您创建 - 您必须自己编写XML格式文件,但这很容易。
旧的线程,但为了记录,我相信问题是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”作为最终的终结符。
感谢您的意见,即使迟到:) – 2012-06-06 10:55:25
好主意,谢谢。 有一天我必须实现它,现在我已经设法通过任务的GUI导入数据。 再次感谢 – 2009-04-16 15:41:45