select c.name, t.name, c.length
from syscolumns c
对于任何具有最大例如varchar(max)的列,c.length给出-1
我该怎么办才能获得长度?
答案 0 :(得分:7)
sys.columns上的数据类型长度为smallint,而varchar(max)的最大长度为21亿,因此在保持实际长度时存在问题。 -1表示varchar(max),varbinary(max),nvarchar(max)和xml。
http://msdn.microsoft.com/en-us/library/ms176106(v=sql.100).aspx
如果你真的需要这个数字,那么你需要一个case语句用-1替换为(2 ^ 31)-1
如果您想获得物理数据的长度,那么您需要根据您需要的信息,在表格上最大/最小/平均适当的长度及其数据。查询字段长度时,DATALENGTH
返回使用的字节,LEN
返回字符数。
答案 1 :(得分:5)
-1表示该列的类型为max
。根据文档,最大长度为max
类型。如果未指定FILESTREAM属性,则MAX类型的最大长度为2GB,或者最大大小仅受disk size available的限制:
BLOB的大小仅受文件卷大小的限制 系统。 2 GB文件大小的标准varbinary(max)限制 不适用于存储在文件系统中的BLOB。
因此你的问题确实没有答案。您可以使用DATALENGTH
来询问表值中任何实际值的实际大小。
答案 2 :(得分:0)
见HERE:
可变长度的非Unicode字符数据。 n可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节。存储大小是输入的实际数据长度+ 2个字节。输入的数据长度可以是0个字符。 varchar的ISO同义词是char变化或字符变化。
换句话说,如果所有可能的空间都被占用,则max = 2147483647个字节。
答案 3 :(得分:0)
每行中列的长度可能会有所不同。因此结果为-1