2012-01-18 12 views
3

既に存在するレポートの「プレビュー」を作成しています。今すぐプログラムされるので、レポートを生成するとデータベースが変更されます(注文の請求書​​が生成され、レポートが生成されます)。 これで、データベースを変更せずにレポートを生成する方法が必要になりました。 は、請求書を生成すると、それを削除するよりも簡単ですので、私はこれらの線に沿って考えていた:TRAN&ROLLBACKを印刷プレビューに使用できますか?

  1. 開始トランザクション
  2. がオブジェクトにデータを読み込むメイク請求書(データセット)
  3. ロールバック・トランザクション
  4. フィード報告するデータセット

これは良いアプローチですか?私は、トランザクションを使う正しい方法のようには思えないので、私は尋ねています。

ありがとうございます!

答えて

6

これはお勧めできません。あなたはテーブルにロックを作成し、不必要にログをバッシングします。全体のアイデアは非常にスケーラブルではないようです。

GenerateInvoiceコードとGenerateReportコードを別々のストアドプロシージャに分割するようにコードを変更できますか?次に別に呼び出すか、別のDoBothストアドプロシージャを追加しますか?

+0

合意。これが起こっている間に誰かが実際に請求書を生成したければ、どうなるか考えないでください。 – ChrisBD

+1

ありがとう!私は別のアプローチを取る。コードを分割しようとすると良い方法のように見えますが、印刷する前に請求書を生成する必要があります。私は後でそれのすべての痕跡を削除する方法が必要です! – Ward

2

Demsに記載されているように、このためにトランザクションを使用することはお勧めできません。

私がこのような問題に使用するアプローチは、ParamをStoredProcに追加してプレビューかどうかを知ることです。

同じ操作をしますが、新しい行を挿入または更新するStored Procの場合は、関連するデータを#TemporaryTableにプルして、実際の表を直接編集する代わりにそのデータを編集します。

手順の最後に、私がプレビューしているかどうかを確認し、そうでない場合は#TemporaryTableの新しい行を挿入/更新します。

+0

+1私はこれまでにこの方法を使ってきました。それはずっともっと好きです。 –

+0

私はそれを正確に行いました!みんな、ありがとう! – Ward

関連する問題