SQL Server UDT大小2005至2008
在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和本机数据类型之间为什么会有这种差异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…………………………………………………………………
除了不使用UDT之外,还有其他方法吗?对不起,但在我看来,你搞错了。请记住,“选择是不坏的”,微软不会修改他们的引擎这样一个关键的部分,如果没有强烈的广告,由于转换问题 您引用的表来自中的decimal和numeric存储,它们基本上比int 如果您使用的是严格的别名,则强烈提示基于int的类型只需要四个字节,不能超过四个字节。 如果您使用的是CLR类型,则可能会出现龙或更多开销
无论如何,您可以通过查看Hi Johan来验证数据类型的占用空间,谢谢。我确实理解你的观点。但问题是,当我进入“新的用户定义数据类型”并基于int创建UDT时,精度显示为10,存储显示为9个字节,而不是sys.types建议的4个字节。对此有何评论?嗨,Johan,进一步的研究表明这是一个UI错误。在sys.types中分配的实际存储量是int的4字节。感谢您的帮助。