2016-04-21 4 views
1

Ich verwende freebcp, um Daten zu SQL Server zu übertragen. Es funktioniert gut, außer für numerische Werte, die am Ende auf ganze Zahlen abgeschnitten werden. Die Spalte in der Datenbank ist ein FLOAT, so dass es Werte mit Dezimalzahlen verarbeiten kann.Freetds schreibt numerisch als Ganzzahl in die Datenbank

Befehl

freebcp MyDatabase.MySchema.MyTable in /path/to/myfile.txt -c -S MyServer -U MyUser -P MyPassword 

MyTable 5 Spalten, die zunächst 2 INTEGER, die anderen sind FLOAT.

Probe von myfile.txt

19344 303634 -0.419398400743657 -1.38936409312037 0.550567291633061 
19345 303634 -1.59787440264054 -2.05068741446749 -1.14506139081359 

als

gespeichert
19344 303634 0 -1 1 
19345 303634 -2 -2 -1 

Wie dieses Problem beheben?

Hinweis: Ich verwende freebcp unter Ubuntu. Bei der Verwendung von bcp unter Windows werden die Floating-Spalten korrekt exportiert, wobei fast dieselbe Syntax verwendet wird (ersetzen Sie einfach freebcp durch bcp und verwenden Sie eine Thrusted-Verbindung).

bcp MyDatabase.MySchema.MyTable in /path/to/myfile.txt -c -S MyServer -T 

Antwort

0

Frager ursprünglich angegebenen Datentyp aus drei Spalten mit dezimal Orte war NUMERIC. Der Fragesteller hat die Frage bearbeitet, indem er den Datentyp zu FLOAT geändert hat, als Antwort auf diese Antwort.

NUMERIC ist funktionell äquivalent zu DECIMAL. msdn - NUMERIC

Sind die Präzision und Skala für die NUMERIC Spalten in der SQL-Tabelle definiert? Wenn sie nicht definiert sind, ist die Standard Genauigkeit 18 und die Skala ist 0. Wenn sie nicht definiert sind, haben Sie 0 Stellen rechts von der Dezimalstelle.

Wenn Sie die Anzahl der Dezimalstellen (Skalierung) nicht voraussagen können, dann ist der FLOAT Datentyp geeigneter. msdn - FLOAT

Andernfalls müssen Sie die Präzision und Skala für NUMERIC einzustellen.

+0

Der Datentyp der nicht ganzzahligen Felder ist 'FLOAT'. Ich habe meine Frage aktualisiert. – Thierry