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

Bar*_*ğlu 3 sql sql-server sql-server-2008

select  c.name, t.name, c.length   
from syscolumns c
Run Code Online (Sandbox Code Playgroud)

对于任何具有最大例如varchar(max)的列,c.length给出-1

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

And*_*rew 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数,返回字符数.


Rem*_*anu 5

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

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

因此,你的问题真的没有答案.您可以使用,询问表值中实际大小的实际大小DATALENGTH.