无法确定BULK INSERT错误的原因

时间:2011-10-05 20:35:00

标签: sql sql-server sql-server-2005 bulkinsert bcp

我正在尝试运行此查询(我也尝试过它而不指定FIELDTERMINATOR和ROWTERMINATOR)。它正在使用我手动创建的数据文件(不是使用bcp out)。

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
  text =批量加载数据转换错误(类型不匹配或无效   指定代码页的字符)   对于第1行,第9列(RouterCallKey)。

     

服务器消息号= 4832严重性= 16状态= 1行= 1   服务器= USA109MSSQL1A
  text =批量加载:在文件中遇到意外的文件结尾   数据文件。

     

服务器消息号= 7399严重性= 16状态= 1行= 1   服务器= USA109MSSQL1A
  text =链接服务器的OLE DB提供程序“BULK”“(null)”   报告错误。
  提供商未提供有关错误的任何信息。

     

服务器消息号= 7330严重性= 16状态= 2行= 1   服务器= USA109MSSQL1A
  text =无法从OLE DB提供程序“BULK”获取链接的行   服务器“(null)”。

我试图让它只用一行。

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)。

谢谢!

1 个答案:

答案 0 :(得分:0)

你不知道吗,我在沮丧到足以发布问题后立即弄明白。代码中的其他地方存在一个逻辑错误,它创建的数据文件正在为此批量插入查询提供错误的表单