2011-10-05 52 views
2

我試圖運行此查詢(我也試過它,但未指定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)。

謝謝!

+0

難道你不知道嗎?在我感到沮喪到足以發佈問題之後,我就想清楚了。代碼中的其他地方存在一個邏輯錯誤,該錯誤創建了將大容量插入查詢作爲錯誤格式文件名的數據文件。它現在工作。 – aparker

+0

那麼,我不會打擾告訴你我發現的問題。很高興你解決了它... – Sparky

回答

0

難道你不知道嗎,在我感到沮喪到足以發佈這個問題之後,我就明白了。代碼中的其他地方有一個邏輯錯誤,它創建的數據文件是以這種大容量插入查詢的錯誤形式提供的