从sql server中的syscolumns获取varchar(max)的最大长度

时间:2012-01-17 17:18:29

标签: sql sql-server sql-server-2008

select  c.name, t.name, c.length   
from syscolumns c
对于任何具有最大例如varchar(max)

的列,

c.length给出-1

我该怎么办才能获得长度?

4 个答案:

答案 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