忽略bcp右截断

问题描述 投票:3回答:2

我有一个包含股票信息的文件,例如股票代码和股票价格。使用freebcp将文件加载到数据库表中。文件中的股票价格格式为:23.125。数据库表中的股价数据类型为[decimal](28,2)。 freebcp通过忽略最后一位数字而毫无问题地将数据加载到表中:23.12已加载到记录的表列中。现在,我们正在使用Microsoft SQL Server的bcp实用程序(版本:11.0)来加载数据。但是,我们现在遇到一个问题:bcp认为将23.125加载到十进制(28.2)是一个错误(#@行783,列23:字符串数据,右截断@#)。它拒绝了该记录。

我不想修改输入文件,因为文件中有很多列需​​要通过删除列的最后一位来固定。

是否有任何方法可以构造BCP或Microsoft SQL Server来输入正确的截断错误?

sql sql-server sql-server-2005
2个回答
1
投票

过去常见的解决方法是将BCP转换为辅助/临时表,然后通过必要的转换将SELECT(列列表)输入基表。另一种选择是Use the OPENROWSET Bulk Rowset Provider,然后您可以根据需要进行投射/转换。


0
投票

我今天遇到此错误,并通过在SQL Server版本15中使用-m参数来解决此问题

bcp dbo.<table> in <csv file> -S <server> -d <db> -U <user> -P <psw> -m 999999 -q -c -t ,

参考:https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15#m

注意:-m选项也不适用于转换money或bigint数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.