【问题标题】:Cross Checking a SQL server report [closed]交叉检查 SQL 服务器报告 [关闭]
【发布时间】:2017-05-09 08:25:54
【问题描述】:

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

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

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

【问题讨论】:

  • 这太宽泛了。我们几乎没有关于您的数据、架构、您用于生成数据的方法以及您所面临问题的实际示例的信息。您应该使用简单的流程创建一些不包含任何敏感信息的虚拟报告数据,以便我们查看您的实际问题。

标签: sql sql-server sql-server-2014 export-to-csv


【解决方案1】:

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

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

另一个选项(特定于 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

【讨论】:

  • 完美——正好运行它所需要的
猜你喜欢
  • 2011-03-15
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多