Sql 服务器数据类型

Sql Server Data Types

我正在编写一个脚本,它将在 sql 服务器中生成每种数据类型的列。我知道 sql-server 将 decimal(5,1) 和 decimal(5,0) 之类的东西视为不同的数据类型,但是我看过的各种资源(w3schools 和 Microsoft 参考页)并不明确说明是否也适用于以下情况:二进制(长度)或 datetimeoffset(0-7) 等。任何见解将不胜感激。

我不确定这些信息是从哪里来的。

SQL 服务器指定 decimal(x,y) 数据类型 - 精确数字数据类型。不同之处在于它使用的字节数,这使得它 "consider" numeric(5,1) 和 numeric(5,0) 成为不同的数据类型。关键区别是当需要对两个数字进行操作(加法或任何其他)时,SQL 服务器会尝试适应应能解释正确结果的精度。

几乎相同的事情应该发生在 binary(x) 上。在不同精度之间进行运算时,应该得到应该包含正确结果的精度。

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

如果您只对 sql 服务器中的每种数据类型感兴趣,您可以从 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 排序

编辑:

tablesys.types每个系统和用户定义类型各占一行。

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

select *
from sys.types
order by name

对于十进制/二进制数据类型,存储依据如下table:

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

参考:decimal and numeric

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

例如 decimal(5,1) (Precision 6) 和 decimal(5,0) (Precision 5) 有相同的存储空间 5 bytes each

我会说答案有点乱。

一方面SQL Server datatypes page明确区分了"data types, collations, precision, scale, or length"。

因此这表明排序规则、精度、比例或长度都是不同于数据类型的属性。

但是同一页还提到

Large value data types: varchar(max), nvarchar(max), and varbinary(max)

所以这意味着添加 max 确实在某种意义上改变了数据类型。然后你也有像 float(24) 这样的情况,它在 SQL 服务器中被视为 real.

的不同数据类型

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