2017-09-16 116 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

相关问题