添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

3 人关注
select  c.name, t.name, c.length   
from syscolumns c

c.length对于任何有最大值的列,例如varchar(max),都给我-1。

我应该怎样做才能获得长度?

sql
sql-server
sql-server-2008
Barış Velioğlu
Barış Velioğlu
发布于 2012-01-18
4 个回答
Andrew
Andrew
发布于 2012-01-18
0 人赞同

sys.columns上的length的数据类型是一个smallint,而varchar(max)的最大长度是21亿,所以它在保持真实长度上有问题。在表示varchar(max)、varbinary(max)、nvarchar(max)和xml的文档中都有-1。

http://msdn.microsoft.com/en-us/library/ms176106(v=sql.100).aspx

如果你真的需要这个数字,那么你就需要一个case语句,用(2^31)-1替换-1

如果你想获得物理数据的长度,那么你需要根据你需要的信息,在有数据的表上最大/最小/平均地计算出适当的长度。当查询字段的长度时, DATALENGTH 返回使用的字节数, LEN 返回字符数。

Remus Rusanu
Remus Rusanu
发布于 2012-01-18
0 人赞同

-1表示该列为 max 类型。然后,按照文档规定,最大长度就是 max 类型。如果没有指定FILESTREAM属性,MAX类型的最大长度为2GB,或者最大尺寸仅受 可用磁盘大小的 限制。

BLOB的大小只受文件系统的体积大小限制。 系统的体积大小。标准的varbinary(max)文件大小为2GB的限制并不适用于存储在文件系统中的BLOB。 不适用于存储在文件系统中的BLOB。

因此你的问题确实没有答案。你可以问什么是表内任何实际值的实际大小,用 DATALENGTH .

aF.
aF.
发布于 2012-01-18
0 人赞同

正如 这里 所看到的。