如何获取 SQL 查询返回的表的大小(以字节为单位)?

问题描述 投票:0回答:4

如何获取 SSM 中 SQL 查询返回的表的大小(以字节为单位)?

sql-server
4个回答
10
投票

您是在寻找表格的大小,还是表格中一行的大小? 仅当所有列均为固定大小(即 nchar 而不是 nvarchar 等)时,后者才可用。

对于可变大小的列,您可以使用每列的最大长度,并将它们相加,以获得最大行大小,但这确实不能准确反映您的实际行大小。

select sum(max_length)
from sys.columns
where object_id = object_id('MyTable')

您还可以创建一个查询,为任何特定行中的每一列返回 DATALENGTH,以获取仅该行的总大小。


6
投票

SQL 查询不返回表,而是返回结果。没有 API 来确定结果的大小,因为结果具有“流”语义,您开始读取结果直到最后,并且无法预先知道大小。预先发送大小需要服务器首先获取结果,将其存储在某处,确定其大小(行数),然后发送大小和结果。显然,这是低效且完全不可取的。最好是在结果可用时立即开始流式传输,而无需中间存储它。 也许您正在寻找其他东西?

数据库中表的大小始终可以根据其页数来确定,请参阅

sys.allocation_units

。帮助程序 
sp_spaceused
 可以为您读取和格式化这些信息。


2
投票
一些

信息的菜单之一“包含客户端统计信息” 否则,按照莱姆斯的回答


0
投票

DECLARE @TableSchema VARCHAR(50) = 'dbo', @TableName VARCHAR(50) = 'Student', @Qry VARCHAR(MAX) SELECT @Qry = CONCAT('SELECT ', STRING_AGG(CONCAT('SUM(DATALENGTH(',[COLUMN_NAME],'))'), ' + '), ' [Total Bytes] FROM [', @TableSchema, '].[', @TableName,']') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @TableSchema AND TABLE_NAME = @TableName EXEC(@Qry)

只需替换您想要获取大小的 
@TableSchema

@TableName 变量的值即可。

© www.soinside.com 2019 - 2024. All rights reserved.