Sql Server数据类型

时间:2016-07-30 18:02:44

标签: sql sql-server types datetimeoffset

我正在编写一个脚本,它将在sql server中生成每个数据类型的列。我知道sql-server认为像decimal(5,1)和decimal(5,0)这样的东西是不同的数据类型,但是我所看到的各种资源(w3schools和microsoft参考页面)并不清楚对于像二进制(长度)或日期时间偏移(0-7)等的情况也是如此。任何见解都将非常感激。

3 个答案:

答案 0 :(得分:1)

我说答案有点乱。

一方面SQL Server datatypes page明确区分“数据类型,整理,精确度,比例或长度”。

这样就表明归类,精度,比例或长度都是与数据类型不同的属性。

然而同一页面也提到了

  

大值数据类型:varchar(max),nvarchar(max)和varbinary(max)

这意味着添加max会在某种意义上改变数据类型。然后你也有像float(24)这样的案例在SQL Server中被视为real的独特数据类型。

这个脚本的目的是什么?简单地生成每种数据类型的列本身并不有用。它是为了什么?脚本有什么意义?

答案 1 :(得分:0)

我不确定这些信息来自何处。

SQL Server指定十进制(x,y)数据类型 - 精确的数字数据类型。不同之处在于它使用的字节数,并使其“考虑”数字(5,1)和数字(5,0)作为不同的数据类型。关键区别在于当需要对两个数字进行操作时(添加或任何其他操作),SQL Server会尝试适应应该考虑正确结果的精度。

二进制(x)几乎完全相同。在不同精度之间执行操作时,应获得应包含正确结果的精度。

Datetimeoffset(0-7)应遵循相同的逻辑。

答案 2 :(得分:0)

如果您只对sql server中的每种数据类型感兴趣,可以从INFORMATION_SCHEMA.COLUMNS获取这些信息 你可以运行这个脚本:

use my_databas
go

SELECT distinct  
    DATA_TYPE , 
    CHARACTER_MAXIMUM_LENGTH,    
    CHARACTER_OCTET_LENGTH,     
    NUMERIC_PRECISION , NUMERIC_SCALE
  FROM INFORMATION_SCHEMA.COLUMNS

按1,2,3订购

修改

sys.types 包含每个系统和用户定义类型的行。

下一个查询获取sql server中的所有数据类型

select *
from sys.types
order by name

对于十进制/二进制数据类型,存储基于下表:

Precision   Storage bytes
    1 - 9   5
    10-19   9
    20-28   13
    29-38   17

参考:decimal and numeric

精确度是小数点左侧和右侧将存储的最大小数位数。

例如,

十进制(5,1)(精度6)和十进制(5,0)(精度5)具有相同的存储空间5个字节