2017-01-13 1 views
2

Warum ist Float als Real in sys.columns oder Information_schema.columns gespeichert, wenn precision <= 24.Float als Real in Datenbank Sql Server

CREATE TABLE dummy 
    (
    a FLOAT(24), 
    b FLOAT(25) 
) 

Überprüfung der Datentyp

SELECT TABLE_NAME, 
     COLUMN_NAME, 
     DATA_TYPE, 
     NUMERIC_PRECISION 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'dummy' 

Ergebnis:

+------------+-------------+-----------+-------------------+ 
| TABLE_NAME | COLUMN_NAME | DATA_TYPE | NUMERIC_PRECISION | 
+------------+-------------+-----------+-------------------+ 
| dummy  | a   | real  |    24 | 
| dummy  | b   | float  |    53 | 
+------------+-------------+-----------+-------------------+ 

Warum float als real gespeichert wird, wenn die precision kleiner oder gleich 24. Ist das irgendwo dokumentiert?

+0

Sehr [ähnliche Frage] (http://Stackoverflow.com/q/40398692/15498) –

Antwort

3

Aus MSDN article die den Unterschied zwischen float und real in T-SQL diskutiert:

für echte

Die ISO Synonym ist Schwimmer (24) aufweist.

float [ (n) ] 

wobei n die Anzahl von Bits, die die Mantisse der Gleitkommazahl in wissenschaftlicher Notation und damit zum Speichern verwendet werden, bestimmt die Genauigkeit und Speichergröße. Wenn n angegeben ist, muss es ein Wert zwischen 1 und 53. Der Standardwert von n sein, ist 53.

n value | Precision | Storage size 
1-24 | 7 digits | 4 bytes 
24-53 | 15 digits | 8 bytes 

SQL Server behandelt n als eine von zwei möglichen Werten. Wenn 1 < = n < = 24, n als 24. behandelt Wenn 25 < = n < = 53, n wird behandelt, als 53.

Wie, warum SQL Server-Etiketten als real, ich glaube, es ist nur ein Synonym. Unter der Haube ist es jedoch immer noch ein float(24).

+0

Ich wundere mich, warum speichert es als 'Real' –

+0

@Prdp Ich glaube nicht, es speichert es als' real', sondern 'float (24) '. Es ist _labeling_ es als 'real'. –

+0

Fair genug ..... –

3

Das ISO-Synonym für real ist float (24).

Please refer for more info: 
https://msdn.microsoft.com/en-us/library/ms173773.aspx 
+0

Das ist ok, aber warum speichert es als 'Real' anstelle von' Float (24) ' –

+1

Hallo Pradeep, denke ich ist nur ein Synonym. Die Dokumentation macht deutlich, dass es unter der Haube immer noch nur ein "Float (24)" ist. –