2017-09-16 118 views
1

我試圖將製表符分隔文件導入到SQL中。 DB中的一個字段是decimal(15,2)。但是我收到的文件可能有一些指數值,如-2.702159776E17,這顯然不適合我在數據庫中的字段。當數值超出範圍錯誤發生10次時,BCP文件未完全加載

問題是如果該指數文件超過10條記錄,BCP未在完整數據中加載。只要遇到指數值的第10個實例,就會跳過文件的其餘部分。

我使用下面的命令BCP加載數據:

dbname.dbo.tablename in "filelocation" -c -F 2 -b 10000 -h "TABLOCK" -T -S servername 

文件我想進口已經有20萬分的記錄。但是我們可以清楚地看到它只處理了18,000條記錄,其餘都被跳過了。 BCP的輸出如下。

Starting copy... 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 
SQLState = 22003, NativeError = 0 
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range 

18149 rows copied. 
Network packet size (bytes): 4096 
Clock Time (ms.) Total  : 265 Average : (68486.79 rows per sec.) 

回答

0

查看以下BCP option

-m max_errors指定的BCP操作被取消之前可能出現的語法錯誤的最大數量。語法錯誤意味着對目標數據類型的數據轉換錯誤爲 。 max_errors總數 排除只能在服務器上檢測到的任何錯誤,例如 約束違規。

無法由bcp實用程序複製的行將被忽略,並且 計爲一個錯誤。如果不包括此選項,則默認值爲 10.

您可以看到缺省值爲10個錯誤。如果您想跳過所有錯誤,請指定此參數並提供一個非常大的值。

如果要導入所有記錄,可以將記錄導入到具有FLOAT數據類型而不是DECIMAL(15,2)的臨時表中。然後,通過將浮點值轉換爲十進制值,將數據從登臺表複製到您想要數據的表中。

+0

完美,謝謝 – Kesava

相關問題