我正在编写一个脚本,它将在sql server中生成每个数据类型的列。我知道sql-server认为像decimal(5,1)和decimal(5,0)这样的东西是不同的数据类型,但是我所看到的各种资源(w3schools和microsoft参考页面)并不清楚对于像二进制(长度)或日期时间偏移(0-7)等的情况也是如此。任何见解都将非常感激。
答案 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
精确度是小数点左侧和右侧将存储的最大小数位数。
例如,十进制(5,1)(精度6)和十进制(5,0)(精度5)具有相同的存储空间5个字节