我创建了一个简单的表格如下:
create table table1
(
col1 float(1),
col2 float
)
当我使用sp_help或脚本表作为create检查表定义时, 我把浮动(1)视为真实的
CREATE TABLE [dbo].[table1](
[col1] [real] NULL,
[col2] [float] NULL
)
根据我对msdn和stackoverflow引用的理解,float的精度n范围为1到53.
为什么默认情况下,只要float指定了精度,它就会转换为实数?
答案 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是未提供的默认精度。