Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server UDT大小2005至2008_Sql_Sql Server_Sql Server 2008_User Defined Types - Fatal编程技术网

SQL Server UDT大小2005至2008

SQL Server UDT大小2005至2008,sql,sql-server,sql-server-2008,user-defined-types,Sql,Sql Server,Sql Server 2008,User Defined Types,在SQLServer2005中,我们定义了一些UDT(用户定义的数据类型),特别是WASSK(用于代理键)。它们被定义为32位的“int”。因此大小为4字节 在SQL Server 2008中,整数数据类型的UDT使用不同的存储机制,具体取决于精度: 储藏 显示UDT的最大存储大小。最大存储大小因精度而异 精度(位数)…存储(字节) 1-9………5 10-19……9 20-28…………………………………………………………………..13 29-38…………………………………………………………………

在SQLServer2005中,我们定义了一些UDT(用户定义的数据类型),特别是WASSK(用于代理键)。它们被定义为32位的“int”。因此大小为4字节

在SQL Server 2008中,整数数据类型的UDT使用不同的存储机制,具体取决于精度:

储藏 显示UDT的最大存储大小。最大存储大小因精度而异

精度(位数)…存储(字节)

1-9………5

10-19……9

20-28…………………………………………………………………..13

29-38………………………………………………………………………………………………………………………..17

这样做的一个结果是,基于int和bigint的udt将占用9个字节! 注意:原生int和bigint数据类型仍然分别占用4和8字节

9字节对于代理键UDT来说似乎相当重

有人能解释为什么会这样(特别是它的设计原理是什么)?UDT和本机数据类型之间为什么会有这种差异


除了不使用UDT之外,还有其他方法吗?

对不起,但在我看来,你搞错了。请记住,“选择是不坏的”,微软不会修改他们的引擎这样一个关键的部分,如果没有强烈的广告,由于转换问题

您引用的表来自中的decimalnumeric存储,它们基本上比int

如果您使用的是严格的别名,则强烈提示基于int的类型只需要四个字节,不能超过四个字节。 如果您使用的是CLR类型,则可能会出现龙或更多开销


无论如何,您可以通过查看

Hi Johan来验证数据类型的占用空间,谢谢。我确实理解你的观点。但问题是,当我进入“新的用户定义数据类型”并基于int创建UDT时,精度显示为10,存储显示为9个字节,而不是sys.types建议的4个字节。对此有何评论?嗨,Johan,进一步的研究表明这是一个UI错误。在sys.types中分配的实际存储量是int的4字节。感谢您的帮助。