我試圖運行此查詢(我也試過它,但未指定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)。
謝謝!
難道你不知道嗎?在我感到沮喪到足以發佈問題之後,我就想清楚了。代碼中的其他地方存在一個邏輯錯誤,該錯誤創建了將大容量插入查詢作爲錯誤格式文件名的數據文件。它現在工作。 – aparker
那麼,我不會打擾告訴你我發現的問題。很高興你解決了它... – Sparky