从SQL Server的syscolumns中获取varchar(max)的最大长度

3
select  c.name, t.name, c.length   
from syscolumns c

对于任何具有最大值(例如varchar(max))的列,c.length将为我提供-1。

我该怎么做才能得到长度?

4个回答

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 返回字符数。

5

-1表示该列的类型为max。根据文档,最大长度是max类型。如果未指定FILESTREAM属性,则MAX类型的最大长度为2GB,或者仅受可用磁盘大小的限制:

BLOB的大小仅受文件系统卷大小的限制。存储在文件系统中的BLOB不受标准varbinary(max) 2GB文件大小的限制。

因此,您的问题实际上没有答案。您可以使用DATALENGTH查询表中任何实际值的实际大小。


0

此处所示:

变长的、非 Unicode 字符数据。n 可以是 1 到 8,000 的值。max 表示最大存储大小为 2^31-1 字节。存储大小是实际输入数据的长度 + 2 字节。输入的数据可以是 0 个字符。varchar 的 ISO 同义词是 char varying 或 character varying。


换句话说,如果占用了所有可能的空间,最大值为2147483647字节。

0

每行的列长度可能会有所不同。因此结果为-1


1
一个原始的解释 :). 但是对于任何VAR类型,比如VARCHAR(100),同样的话也适用:每行的长度可能在0到100之间变化。然而长度是100,而不是-1。-1实际上意味着MAX类型,这是一种约定。 - Remus Rusanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接