如何获取 SSM 中 SQL 查询返回的表的大小(以字节为单位)?
您是在寻找表格的大小,还是表格中一行的大小? 仅当所有列均为固定大小(即 nchar 而不是 nvarchar 等)时,后者才可用。
对于可变大小的列,您可以使用每列的最大长度,并将它们相加,以获得最大行大小,但这确实不能准确反映您的实际行大小。
select sum(max_length)
from sys.columns
where object_id = object_id('MyTable')
您还可以创建一个查询,为任何特定行中的每一列返回 DATALENGTH,以获取仅该行的总大小。
SQL 查询不返回表,而是返回结果。没有 API 来确定结果的大小,因为结果具有“流”语义,您开始读取结果直到最后,并且无法预先知道大小。预先发送大小需要服务器首先获取结果,将其存储在某处,确定其大小(行数),然后发送大小和结果。显然,这是低效且完全不可取的。最好是在结果可用时立即开始流式传输,而无需中间存储它。 也许您正在寻找其他东西?
数据库中表的大小始终可以根据其页数来确定,请参阅
。帮助程序
sp_spaceused
可以为您读取和格式化这些信息。
信息的菜单之一“包含客户端统计信息” 否则,按照莱姆斯的回答
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 变量的值即可。