You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server:查询各表近24小时新增数据量及总数据量

解决方案:统计SQL Server各表近24小时新增数据量

当然有办法实现这个需求!不过首先得明确一个前提:你的每张业务表必须有一个记录数据插入时间的字段(比如CreateTimeInsertedAt这类)——因为SQL Server本身不会自动追踪每条数据的插入时间,没有这个字段的话,统计结果要么不准确,要么根本没法实现。


1. 单表查询示例

如果只需要查某一张表(比如你的表A)的近24小时新增量,直接用下面的语句就行:

SELECT COUNT(*) AS Last24hAddedCount
FROM TableA
WHERE InsertedAt >= DATEADD(HOUR, -24, GETDATE())

InsertedAt换成你表中实际的插入时间字段名即可。


2. 批量查询所有表的新增量(含总数据量)

如果要一次性查询所有符合条件的表,同时展示总数据量(和你原来的查询结合),可以用动态SQL来遍历所有表:

DECLARE @SQL NVARCHAR(MAX) = ''

-- 拼接每个表的查询语句
SELECT @SQL = @SQL + '
UNION ALL
SELECT 
    ''' + t.name + ''' AS TableName,
    -- 引用你原来的总数据量查询逻辑
    (SELECT TOP 1 rows FROM sys.sysindexes WHERE id = t.object_id AND indid IN (0,1)) AS TotalCount,
    COUNT(*) AS Last24hAddedCount
FROM ' + QUOTENAME(t.name) + '
WHERE InsertedAt >= DATEADD(HOUR, -24, GETDATE())'
FROM sys.tables t

-- 去掉开头多余的UNION ALL
SET @SQL = STUFF(@SQL, 1, 10, '')

-- 执行动态SQL
EXEC sp_executesql @SQL

注意事项:

  • 如果不同表的插入时间字段名不一样(比如有的是CreateTime,有的是AddTime),你需要手动调整拼接逻辑,或者维护一个记录各表时间字段的映射表来适配。
  • 给插入时间字段创建索引!不然大表的COUNT(*)查询会非常慢,严重影响性能。

3. 没有插入时间字段的替代方案(仅估算)

如果你的表没有插入时间字段,只能用系统视图做估算,结果可能因为索引重建、统计信息更新等因素不准,仅供参考:

SELECT 
    t.name AS TableName,
    (SELECT TOP 1 rows FROM sys.sysindexes WHERE id = t.object_id AND indid IN (0,1)) AS TotalCount,
    SUM(ps.row_count) - SUM(ps.prev_row_count) AS Last24hAddedEstimate
FROM sys.tables t
JOIN sys.dm_db_partition_stats ps ON t.object_id = ps.object_id
WHERE ps.index_id IN (0,1)
  AND ps.last_updated >= DATEADD(HOUR, -24, GETDATE())
GROUP BY t.name

这个方案依赖分区统计的更新时间,只能大致估算新增量,不建议用于精准统计场景。


内容的提问来源于stack exchange,提问作者MiniDr

火山引擎 最新活动