select c.name, t.name, c.length
from syscolumns c
对于任何具有最大值(例如varchar(max))的列,c.length将为我提供-1。
我该怎么做才能得到长度?
select c.name, t.name, c.length
from syscolumns c
对于任何具有最大值(例如varchar(max))的列,c.length将为我提供-1。
我该怎么做才能得到长度?
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表示该列的类型为max
。根据文档,最大长度是max
类型。如果未指定FILESTREAM属性,则MAX类型的最大长度为2GB,或者仅受可用磁盘大小的限制:
BLOB的大小仅受文件系统卷大小的限制。存储在文件系统中的BLOB不受标准varbinary(max) 2GB文件大小的限制。
因此,您的问题实际上没有答案。您可以使用DATALENGTH
查询表中任何实际值的实际大小。
如此处所示:
变长的、非 Unicode 字符数据。n 可以是 1 到 8,000 的值。max 表示最大存储大小为 2^31-1 字节。存储大小是实际输入数据的长度 + 2 字节。输入的数据可以是 0 个字符。varchar 的 ISO 同义词是 char varying 或 character varying。
每行的列长度可能会有所不同。因此结果为-1