2012-03-01 48 views
0

我想調試一個SQL Server 2008批量插入,並且得到的錯誤並不真正加起來。奇數大容量插入錯誤

的T-SQL是

BULK INSERT [dbo].SYNC_OFFERDISCOUNTS 
FROM 'c:\inetpub\ftproot\ecometrydev\offer-discounts.csv' 
WITH (BATCHSIZE = 500, FIRSTROW = 2, ROWTERMINATOR = '\n', FIELDTERMINATOR ='||^^||') 

我的錯誤是

消息4863,級別16,狀態1,行3大容量裝載數據轉換錯誤 (截斷)爲第2行,列72(ACTION_TYPE)。

消息4863,級別16, 狀態1,行3行 3列72(ACTION_TYPE)的批量加載數據轉換錯誤(截斷)。

消息4863級別16狀態1行3批量 行4列72 (ACTION_TYPE)的加載數據轉換錯誤(截斷)。

等等,直到第12行,在這一點上達到10個錯誤,整個事情都關閉了。我的數據庫模式和CSV的部分內容如下。它看起來像我一個字符I插入ACTION_TYPE,所以我不知道爲什麼這個錯誤發生。

編輯

尤其令人沮喪的是,有在文件中只列,文件的最後一列對應於ACTION_TYPE的事實。

/EDIT

我已經嘗試過增加此列varchar(50),用這種思想,也許創建此CSV滑倒在一些隱蔽的Unicode廢話,但遺留系統是什麼也沒有改變。

我知道這裏有很多垃圾。我已經一遍又一遍地計算了所有這些零值,並且總是結束於單個I字符完全插入到ACTION_TYPE列中。我希望在這裏有一位專家可以發現一些晦澀的錯誤。


CSV

DISCOUNTTABLE || || ^^ || MULTIQTY_001 ^^ || || MULTIQTY_002 ^^ || || MULTIQTY_003 ^^ || || MULTIQTY_004 ^^ || MULTIQTY_005 || ^^ || MULTIQTY_006 || ^^ || MULTIQTY_007 || ^^ || MULTIQTY_008 || ^^ || MULTIQTY_009 || ^^ || DISCOUNTPERCENT_001 || ^^ || DISCOUNTPERCENT_002 || ^^ || DISCOUNTPERCENT_003 | | ^^ || DISCOUNTPERCENT_004 || ^^ || DISCOUNTPERCENT_005 || ^^ || DISCOUNTPERCENT_006 || ^^ || DISCOUNTPERCENT_007 || ^^ || DISCOUNTPERCENT_008 || ^^ || DISCOUNTPERCENT_009 || ^^ || DISCOUNTITEM_001 || ^^ || DISCOUNTITEM_002 || ^^ || DISCOUNTITEM_003 || ^^ || DISCOUNTITEM_004 || ^^ || DISCOUNTITEM_005 || ^^ || DISCOUNTITEM_006 || ^^ || DISCOUNTITEM_007 || ^^ || DISCOUNTITEM_008 ||^^ || DISCOUNTITEM_009 || ^^ || DISCOUNTQTY_001 || ^^ || DISCOUNTQTY_002 || ^^ || DISCOUNTQTY_003 || ^^ || DISCOUNTQTY_004 || ^^ || DISCOUNTQTY_005 || ^^ || DISCOUNTQTY_006 || ^^ || DISCOUNTQTY_007 ||^^ || DISCOUNTQTY_008 || ^^ || DISCOUNTQTY_009 || ^^ || DISCOUNTPRICE_001 || ^^ || DISCOUNTPRICE_002 || ^^ || DISCOUNTPRICE_003 || ^^ || DISCOUNTPRICE_004 || ^^ || DISCOUNTPRICE_005 || ^^ || DISCOUNTPRICE_006 || ^^ || DISCOUNTPRICE_007 || ^^ || DISCOUNTPRICE_008 || ^^ || DISCOUNTPRICE_009 || ^^ || DISCOUNTDOL_001 || ^^ || DISCOUNTDOL_002 || ^^ || DISCOUNTDOL_003 || ^^ | | DISCOUNTDOL_004 || ^^ || DISCOUNTDOL_005 || ^^ || DISCOUNTDOL_006 || ^^ || DISCOUNTDOL_007 || ^^ || DISCOUNTDOL_008 || ^^ || DISCOUNTDOL_009 || ^^ || ITEMQUANTITY_001 || ^^ || ITEMQUANTITY_002 || ^^ || ITEMQUANTITY_003 || ^^ || ITEMQUANTITY_004 || ^^ || ITEMQUANTITY_005 || ^^ || ITEMQUANTITY_006 || ^^ || ITEMQUANTITY_007 || ^^ || ITEMQUANTITY_008 || ^^ || ITEMQUANTITY_009 || ^^ || DESC1 || ^^ || DISCOUNTUPSELL || ^^ || USERID || ^^ ||日期|| ^^ || TIME || ^^ ||狀態|| ^^ || ROWACTION | | ^^ ||
0006 || ^^ || 3000 || ^^ || 999999999 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 2000 || ^^ || 2000 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 20%OFF $ 30 + ORDER || ^^ || SAVE 20%ON $ 30 + ORDER || ^^ || LKWILHEL || ^^ || 20110214 || ^^ || 11141050 ||^^ ||%d || ^^ ||我|| ^^ ||
0023 || ^^ || 5000 || ^^ || 999999999 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 1500 || ^^ || 1500 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 15%OFF $ 50 + ORDER || ^^ || SAVE 15%ON $ 50 + ORDER || ^^ || LKWILHEL || ^^ || 20110214 || ^^ || 11013470 ||^^ ||%d || ^^ ||我|| ^^ || 0049 || ^^ || 4600 || ^^ || 999999999 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 3000 || ^^ || 3000 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 0 || ^^ || 30%OFF $ 46 + ORDER || ^^ || SAVE 30%ON $ 46 + ORDER || ^^ || LKWILHEL || ^^ || 20110214 || ^^ || 11384810 ||^^ ||%d || ^^ ||我|| ^^ ||


enter image description here

+0

我認爲第72列的數據大小小於csv的值,您能檢查第72列並增加大小,然後重試。 – 2012-03-01 20:33:15

+0

@ThitLwinOo - 我有同樣的想法。我把它交給'varchar(50)',但無濟於事。 – 2012-03-01 20:34:03

+0

您是否嘗試過使用ACTION_TYPE的幾行和數據大小測試增加VARCHAR(MAX)? – 2012-03-01 20:48:52

回答

2

確定哪些終線(EOL)字符(S)的是。如果行尾是\ r \ n(並且您只指定了\ n),那麼可能是批量插入正在讀入下一行,並試圖截斷它認爲是ACTION_TYPE

使用記事本++查找EOL字符是什麼。點擊查看>顯示符號>顯示行尾。

+0

+1僅用於閱讀所有內容(您的第一個贊成!!)謝謝。你認爲什麼是判斷\ n是否真的終止了我的界限的最好方法?這個系統的舊版本正在工作,我沒有改變csv的生成方式,所以我懷疑這是個問題。 ---前面有很多數值列前的空格,我假設SQL只是解析而已。同樣,這個系統的舊版本似乎並不介意這些空間。 – 2012-03-01 20:46:23

+0

一個簡單的方法來告訴你的EOL字符是通過Notepad ++。查看>顯示符號>顯示行尾。 CR = \ r,LF = \ n。基於Windows的文件EOL字符是CRLF,Unix文件是\ n。 我也不確定第72列實際指的是什麼。是字符列,還是你實際上在桌子上有72個字段? 感謝您的第一次upvote! – 2012-03-01 21:00:09

1

嘗試刪除SLOTID列,它應該可以解決問題。 假設SLOTID不作爲源文件中的列存在。