Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算表记录的最大存储大小?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql 计算表记录的最大存储大小?

Sql 计算表记录的最大存储大小?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,有没有一种方法可以确定在SQL Server中,如果手工操作,记录的最大大小是多少?例如: CREATE TABLE test ( id INT PRIMARY KEY IDENTITY(1, 1), name VARCHAR(256), test_date DATETIME ) 所以,如果我没有弄错的话,在手工计算时,记录的最大值可能是272字节。但是,我有一个包含更多列的表,我需要对多个表执行此操作,所以我想知道是否可以通过一个简单的查询执行此操作 我在inform

有没有一种方法可以确定在SQL Server中,如果手工操作,记录的最大大小是多少?例如:

CREATE TABLE test (
    id INT PRIMARY KEY IDENTITY(1, 1),
    name VARCHAR(256),
    test_date DATETIME
)
所以,如果我没有弄错的话,在手工计算时,记录的最大值可能是272字节。但是,我有一个包含更多列的表,我需要对多个表执行此操作,所以我想知道是否可以通过一个简单的查询执行此操作

我在
information\u SCHEMA.TABLES
中找不到任何信息,甚至在
information\u SCHEMA.COLUMNS
中也找不到任何信息,我想我可以在这些列中进行简单的
SUM
。此外,
sysobjects
syscolumns
似乎没有必要的信息。
syscolumns
表确实有一个
length
字段,但这不是实际的存储大小

谢谢大家

试试这个:

Select  schema_name(T.schema_id) As SchemaName,
        T.Name As TableName,
        Sum(C.max_length) As RowSize
From    sys.tables T
        Inner Join sys.columns C
            ON T.object_id = C.Object_ID
        INNER JOIN sys.types S
            On C.system_type_id = S.system_type_Id
Group By schema_name(T.schema_id),
        T.Name
Order By schema_name(T.schema_id),
        T.Name

完美的朋友!等待一段时间后,我将在几分钟内接受答案。nvarchar列有问题。原始代码没有考虑每个字符2字节的存储空间。还有一个问题。如果表中的列类型为text、ntext、varchar(max)、nvarchar(max)、image或varbinary(max),则数据(不一定)存储在行中。相反,行中存储了一个16字节的指针,该指针指向正常表数据之外的位置。我正在使用的数据库中实际上没有这种情况,所以这应该是可以的。另一个问题:当使用它时,我得到了不合理的大结果。事实证明,在SYS.TYPES中,[system\u type\u id]列不是唯一的。在我的数据库中有重复的值。因此,结果集中存在重复的条目,这些值在求和时计数两次。另一方面,[user\u type\u id]列是唯一的。当我为SYS.TYPES和SYS.COLUMNS之间的内部联接而将[system\u type\u id]切换为[user\u type\u id]时,我的结果更加合理。