我正在尝试运行此查询(我也尝试了未指定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”获取链接服务器“(空)”的行。
服务器消息号= 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)。
谢谢!
您不知道吗,我在感到沮丧后马上就提出了问题。在代码中的其他地方存在一个逻辑错误,该错误创建了供此大容量插入查询使用的数据文件的数据文件,格式错误