【问题标题】:Compare COUNT results before and after operation/load in SQL在 SQL 中比较操作/加载前后的 COUNT 结果
【发布时间】:2021-08-19 14:49:26
【问题描述】:

我的一个案例需要帮助。

  1. 假设我有一个表,其中只有一个名为 CustomerID 的列,包含 1500 条记录。
  2. 每天 2 次将 CustomerID 表加载到 DB 中 - 上午 10 点和晚上 10 点
  3. 我想比较早上(上午 10 点)的 CustomerID 表和(晚上 10 点)的表

SELECT COUNT(*) from CustomerID -- 10 AM / 1500 records.

SELECT COUNT(*) from CustomerID -- 10 PM / 1510 records.

我想检查这 10 条额外记录 - 仅计数,仅此而已。

主要思想是跟踪表,如果晚上 10 点没有新记录 - 告诉负责人该表已“损坏”,因为该表应随着每次负载而增加计数。

谢谢!

【问题讨论】:

  • 如果表只有 1 列,你怎么知道哪些行是新的?如果您不知道,为什么您认为 RDBMS 会?您不能仅使用 1 列执行此操作,除非该列是插入该行的日期和时间(老实说,如果是,它就是无用的数据)。

标签: sql sql-server compare


【解决方案1】:

我最近为多个数据库和表做了这个,但我可以告诉你如何只为一个表做这个。

说明:

  1. 使用下面的查询创建一个存储过程(更新你的数据库和表 名字)

    *您需要先创建表才能运行它

  2. 将此放在 10a 和 10p 的作业计划中

  3. 每天检查或使用这个新表格作为数据创建可视化/仪表板 源来显示所有内容是否按应有的方式加载

查询:

use [YOUR DB NAME]
go

create procedure [YOURSCHEMA.YOUR_NEW_AUDIT_TABLE_NAME] as

insert into [TABLE_NAME_YOU_WANT_TO_CREATE_FOR_TRACKING]
select schema_name(schema_id) as [schemaname],
       [tables].name as [tablename],
       sum([partitions].[rows]) as [totalrowcount],
       getdate() as date_checked
from sys.tables as [tables]
    join sys.partitions as [partitions] on [tables].[object_id] = [partitions].[object_id] and [partitions].index_id in ( 0, 1 )
where [tables].name = '[TABLE_NAME_YOU_WANT_TRACKED]'
group by schema_name(schema_id), [tables].name;


go;

【讨论】:

  • 谢谢你,你太棒了!我认为这应该可以完成这项工作!
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多