これはかなり一般的な質問です。具体的な内容がなければ、具体的な答えを伝えることは非常に難しいですが、これまで私が使ってきた解決策がいくつかあります。
通常、このようなレポートには「総計」行があります。ウィジェットレポートは、月、地域、営業担当者、製品タイプなどで細分化されていますが、通常は「総ウィジェット売り」があります。これがクイッククエリー(結合や他の改良を取り除く必要があるかもしれません)の場合、レポートデータを生成した後にそのクエリーを実行すると、レポートの総計とレポートの最後の総計を比較できます。結果が異なる場合は、レポートの実行中にデータが変更されたことがわかります。
SQLServer固有のもう1つのオプションは、レポート対象のデータに対して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
これは、それほど広すぎます。データ、スキーマ、データを生成するために使用しているメソッド、および直面している問題の実際の例に関する情報はほとんどありません。重要な情報を含まないダミーのレポートデータを作成し、実際の問題を確認できる単純なプロセスフローを作成する必要があります。 – Tanner