在创建“float with precision”类型的表列时,在SQL Server中将列创建为“real”类型

时间:2016-11-03 10:04:51

标签: sql sql-server types sql-server-2016

我创建了一个简单的表格如下:

create table table1
(
col1 float(1),
col2 float
)

当我使用sp_help或脚本表作为create检查表定义时, 我把浮动(1)视为真实的

CREATE TABLE [dbo].[table1](
[col1] [real] NULL,
[col2] [float] NULL
)

根据我对msdnstackoverflow引用的理解,float的精度n范围为1到53.

为什么默认情况下,只要float指定了精度,它就会转换为实数?

1 个答案:

答案 0 :(得分:1)

SQL Server不记得您在创建表时使用的语言 - 它只是查询当前表定义并呈现可以用于创建相同表的文本。

正如documentation指出的那样,SQL Server不支持任意精度 - 它只支持两个精度--24和53:

  

SQL Server将n视为两个可能值之一。如果 1 < = n< = 24 n将被视为 24 。如果 25 < = n< = 53 n将被视为 53

正如它所指出的那样,real被视为float(24)的同义词:

  

真实的ISO同义词是 float(24)

因此,任何精度为24或更低的浮点列实际上都将创建为float(24)float(24)的同义词是real。系统不记得最初是将其指定为float(1)float(24)还是real

  

为什么默认情况下,只要float指定了精度,它就会转换为实数?

没有。如上所述,如果您创建一个类型为float(25)(或任何更高精度)的列,您会发现它以普通float而不是real的形式返回,因为它是创建为float(53),53是未提供的默认精度。