Freetds在数据库

时间:2016-04-21 12:06:15

标签: sql-server freetds freebcp

我使用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

1 个答案:

答案 0 :(得分:0)

  

发问者最初说明了带有小数的三列数据类型   地方是NUMERIC。问题编辑问题,更改数据类型   至FLOAT,以回应此答案。

NUMERIC功能相当于DECIMALmsdn - NUMERIC

是否为SQL表中的NUMERIC列定义了 precision scale ?如果未定义它们,则默认精度为18且 scale 为0.因此,如果未定义它们,则小数点右侧将有0个位置。< / p>

如果无法预测所需的小数位数( scale ),则FLOAT数据类型更合适。 msdn - FLOAT

否则,您需要为NUMERIC设置精度比例