select c.name, t.name, c.length
from syscolumns c
c.length对于任何有最大值的列,例如varchar(max),都给我-1。
我应该怎样做才能获得长度?
在sql server中从syscolumns中获取varchar(max)的最大长度
3
人关注
Barış Velioğlu
发布于
2012-01-18
4
个回答
Remus Rusanu
发布于
2012-01-18
0
人赞同
-1表示该列为
max
类型。然后,按照文档规定,最大长度就是
max
类型。如果没有指定FILESTREAM属性,MAX类型的最大长度为2GB,或者最大尺寸仅受
可用磁盘大小的
限制。
BLOB的大小只受文件系统的体积大小限制。
系统的体积大小。标准的varbinary(max)文件大小为2GB的限制并不适用于存储在文件系统中的BLOB。
不适用于存储在文件系统中的BLOB。
因此你的问题确实没有答案。你可以问什么是表内任何实际值的实际大小,用
DATALENGTH
.
sys.columns上的length的数据类型是一个smallint,而varchar(max)的最大长度是21亿,所以它在保持真实长度上有问题。在表示varchar(max)、varbinary(max)、nvarchar(max)和xml的文档中都有-1。
http://msdn.microsoft.com/en-us/library/ms176106(v=sql.100).aspx
如果你真的需要这个数字,那么你就需要一个case语句,用(2^31)-1替换-1
如果你想获得物理数据的长度,那么你需要根据你需要的信息,在有数据的表上最大/最小/平均地计算出适当的长度。当查询字段的长度时,
返回使用的字节数,
返回字符数。
DATALENGTH
LEN