我正在尝试将制表符分隔文件导入SQL。 DB中的一个字段是decimal(15,2)
。但是我收到的文件可能有一些指数值,如-2.702159776E17
,这显然不适合我在DB中的字段。
问题是如果该指数文件的记录超过10条,则BCP不会加载到完整数据中。一旦遇到指数值的第10个实例,它就会跳过文件的其余部分。
我使用以下BCP命令加载数据:
dbname.dbo.tablename in "filelocation" -c -F 2 -b 10000 -h "TABLOCK" -T -S servername
我尝试导入的文件有200,000条记录。但是我们可以清楚地看到它只处理了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 :(得分:0)
查看以下BCP option:
-m max_errors 指定取消bcp操作之前可能发生的最大语法错误数。语法错误意味着 数据转换错误到目标数据类型。 max_errors总计 排除只能在服务器上检测到的任何错误,例如 约束违规。
bcp实用程序无法复制的行将被忽略 算作一个错误。如果未包含此选项,则默认为 10。
您可以看到默认值为10个错误。如果要跳过所有错误,请指定此参数并提供非常大的值。
如果要导入所有记录,可以将记录导入到具有FLOAT
数据类型而不是DECIMAL(15,2)
的临时表中。然后,通过将浮点值转换为十进制值,将数据从登台表复制到您想要数据的表中。