2

sql server 分配给数字文字的类型是什么: 2. ,即 2 后跟一个点?

我很好奇,因为:

select convert(varchar(50), 2.)
union all
select convert(varchar(50), 2.0)

返回:

2
2.0

这让我问 2. 和 2.0 类型之间有什么区别?

Sql server 似乎通过找到可以容纳数字的最小存储类型来根据数字本身为数字文字分配类型。值 1222333 存储为 int,而 1152921504606846975 存储为 big int。

谢谢

编辑:我还想补充一下为什么这很重要。在 sql server 2008 r2 中,select 2/5 返回 0 而 select 2./5 返回 0.4,这是由于 sql server 处理这些类型的方式。在 oracle 和 Access 中选择 2/5(oracle: select 2/5 from dummy)返回 0.4。这就是它应该的方式。我想知道他们是否在 sql server 2012 中修复了这种行为。如果他们这样做了,我会感到惊讶。

4

1 回答 1

0

这个脚本可能会回答我的问题。2. 的类型是 numeric(1, 0)。

create table dbo.test_type (field sql_variant)
go

delete from dbo.test_type
go

INSERT INTO dbo.test_type
VALUES (2.);

INSERT INTO dbo.test_type
VALUES (2.0);


SELECT field
     , sql_variant_property (field
                           , 'BaseType')
         AS BaseType
     , sql_variant_property (field
                           , 'Precision')
         AS Precision
     , sql_variant_property (field
                           , 'Scale')
         AS Scale
  FROM dbo.test_type

它返回:

2     numeric   1   0
2.0   numeric   2   1

这就是为什么当 2.0 转换为 varchar 时结果是 2.0。sql server 似乎记录了精度。

于 2012-09-19T03:35:11.533 回答