Sql 计算表记录的最大存储大小?
有没有一种方法可以确定在SQL Server中,如果手工操作,记录的最大大小是多少?例如: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
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]时,我的结果更加合理。