我使用freebcp
将数据批量复制到SQL Server。除了最终被截断为整数的数值之外,它工作正常。数据库中的列是FLOAT
,因此它可以处理带小数的值。
命令
freebcp MyDatabase.MySchema.MyTable in /path/to/myfile.txt -c -S MyServer -U MyUser -P MyPassword
MyTable有5列,第一列是2 INTEGER,其他是FLOAT。
来自myfile.txt
19344 303634 -0.419398400743657 -1.38936409312037 0.550567291633061
19345 303634 -1.59787440264054 -2.05068741446749 -1.14506139081359
存储为
19344 303634 0 -1 1
19345 303634 -2 -2 -1
如何解决这个问题?
注意:我在Ubuntu下使用freebcp
。在Windows下使用bcp
时,使用几乎相同的语法正确导出浮动列(只需将freebcp
替换为bcp
并使用强制连接。)
bcp MyDatabase.MySchema.MyTable in /path/to/myfile.txt -c -S MyServer -T
答案 0 :(得分:0)
发问者最初说明了带有小数的三列数据类型 地方是
NUMERIC
。问题编辑问题,更改数据类型 至FLOAT
,以回应此答案。
NUMERIC
功能相当于DECIMAL
。 msdn - NUMERIC
是否为SQL表中的NUMERIC
列定义了 precision 和 scale ?如果未定义它们,则默认精度为18且 scale 为0.因此,如果未定义它们,则小数点右侧将有0个位置。< / p>
如果无法预测所需的小数位数( scale ),则FLOAT
数据类型更合适。 msdn - FLOAT
否则,您需要为NUMERIC
设置精度和比例。