• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

无法确定BULK INSERT错误的原因

sql 来源:aparker 3次浏览

我试图运行此查询(我也试过它,但未指定FIELDTERMINATOR和ROWTERMINATOR)。它使用的是我手动创建的数据文件(不带bcp输出)。无法确定BULK INSERT错误的原因

BULK INSERT FS.dbo.Termination_Call_Detail 
FROM 'C:\Termination_Call_Detail__1317841711.dat' 
WITH 
(
FORMATFILE = 'C:\Termination_Call_Detail__update_TerminationCallDetailData.fmt', 
FIELDTERMINATOR = '\t', 
ROWTERMINATOR = '\r\n' 
) 

的误差我得到:

服务器消息号= 4864严重性= 16状态= 1行= 1个 服务器= USA109MSSQL1A
文本=批量负载数据转换错误(类型不匹配或对于指定的代码页无效 字符) 用于第1行第9列(RouterCallKey)。

服务器消息号= 4832严重性= 16状态= 1行= 1 服务器= USA109MSSQL1A
文本=盒装负载:在 数据文件中遇到文件的一个意外结束。

服务器消息号= 7399严重性= 16状态= 1行= 1个 服务器= USA109MSSQL1A
文本= OLE DB提供 “BULK” 链接服务器 “(空)” 报告错误。
提供者没有提供有关错误的任何信息。

Server邮件数量= 7330严重性= 16状态= 2线= 1个 服务器= USA109MSSQL1A
文本=无法获取来自OLE DB提供程序 “BULK” 为链接 服务器 “(空)” 一行。

我想让它只用1行工作。

ASCII数据文件:

数据文件的

611658275664 1      5027 5001 5005 5010 2011-10-05 14:53:44  1317840824  240  2011-10-05 14:54:04  1317840844  150026 211  2  1  4480 21543 28  0  29  0  0  0  0  29  0  0      0  IPT_Call  TAC_Rollover                 424755/4  N  0  5030 5000 2865     805336626      2674794299  N            1  3  N  0    0 

六角转储:http://pastebin.com/grnwQrdT

格式文件:http://pastebin.com/WwSQvCGg

表架构:http://pastebin.com/gFjp4xYy

此插入件被使用66列;该表包含84列。如果我用整个表的bcp和同一行的数据文件创建一个格式文件,我可以毫无问题地运行这个BULK INSERT QUERY。通过BCP在同一行数据的创建(所有列)数据文件的

十六进制转储:http://pastebin.com/MpMk6iq4

我精心寻找任何缺失或换行分隔符标签,但我不能找到任何。您可以在数据文件的十六进制转储中看到所有内容都正确分隔。我将它与一个由bcp创建的数据文件进行比较,并且找不到任何格式差异。

我也不能想象为什么它抱怨那个特定的字段(RouterCallKey) – 在格式文件中有相同类型的其他字段(如RouterCallKeyDay)。

谢谢!


===========解决方案如下:

难道你不知道吗,在我感到沮丧到足以发布这个问题之后,我就明白了。代码中的其他地方有一个逻辑错误,它创建的数据文件是以这种大容量插入查询的错误形式提供的


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)