交叉检查 SQL 服务器报告

Cross Checking a SQL server report

我有一份每天运行的报告。我想将此报告的输出发送到一个 csv 文件。由于报告的性质,有时可能会丢失一些数据(作业执行时会生成新数据,因此有时会在此过程中丢失一些数据,因为这是一项冗长的作业)。

有没有办法每天交叉检查没有丢失前一天的任何数据 - 也许在每行末尾打勾或叉号以表明数据没有丢失已导出为 csv?

我正在处理敏感信息,因此无法分享任何报告详细信息。

这是一个相当普遍的问题。没有具体细节,很难给你一个具体的答案 - 但这里有一些我过去使用过的解决方案。

通常,此类报告有 "grand total" 行 - 您的小部件报告可能按月份、地区、销售人员、产品类型等细分 - 但通常有 "total widgets sold" 行。如果这是一个快速查询(您可能需要删除联接和其他优化),那么在生成报告数据后 运行 执行该查询可以将您的报告总计与报表末尾的总计进行比较报告。如果结果不同,您就知道在 运行生成报告时数据发生了变化。

另一种选择(特定于 SQLServer)是对您报告的数据使用 checksum。如果校验和在报告开始和结束之间发生变化 运行,您就知道数据发生了变化。

最后 - 也是最引人注目的 - 如果报告的准确性至关重要,您可以存储报告中包含特定行的事实 运行。这会使您的报告更加复杂,但它可以让您清楚地知道您已经包含了所需的所有数据。例如:

insert into reporting_history
select @reportID, widget_sales_id
from widget_sales

--- reporting logic here
select widget.cost,
       widget_sales.date, 
       widget_sales.price, 
       widget_sales......
from widgets inner join widget sales on ...
             inner join reporting_history on widget_sales.widget_sales_id = widget_sales.widget_sales_id

---- all your other logic