admin

无法确定大量插入错误的原因

sql

我正在尝试运行此查询(我也尝试了未指定FIELDTERMINATOR和ROWTERMINATOR的情况)。它使用的是我事先手动创建的数据文件(不带bcp输出)。

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服务器= USA109MSSQL1A
文本=链接服务器“(null)”的OLE DB访问接口“ BULK”报告了一个错误。
提供程序未提供有关该错误的任何信息。

服务器消息号= 7330严重性= 16状态= 2行=服务器= 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)。

谢谢!


阅读 113

收藏
2021-06-07

共1个答案

admin

您不知道吗,我在感到沮丧后马上就提出了问题。在代码中的其他地方存在一个逻辑错误,该错误创建了供此大容量插入查询使用的数据文件的数据文件,格式错误

2021-06-07