我正在尝试运行此查询(我也尝试过它而不指定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)。
谢谢!
答案 0 :(得分:0)
你不知道吗,我在沮丧到足以发布问题后立即弄明白。代码中的其他地方存在一个逻辑错误,它创建的数据文件正在为此批量插入查询提供错误的表单