0

私は少し奇妙な状況にあり、テーブルのフィールドにデータを入力するのに苦労しています。また、私はSQLServerにかなり慣れていないことにも言及する必要があります。

使用しているもの:SQLServer2008データベースで作業しています。懸念されるテーブルは、、、PO_APPROVAL_LOGおよびの2つPO_HDRです。

ここで実行されているプロセスは、新しい発注書の作成です。場合によっては、POを作成するためにマネージャーの承認が必要になります。Active Directoryに対してマネージャーを認証するWinForm(C#)を使用しています。マネージャーが特定のグループのメンバーである場合、POは承認されます。

私の状況:サードパーティのアプリケーションが使用されており、アプリケーションで保存イベントが発生する前に実行される検証コード(上記)を作成しています。特定の基準が満たされると、検証コードが返さTRUEれ、アプリケーションが保存を続行できるようになります。保存が開始されると、データベース内のいくつかのテーブルが挿入されますPO_HDR。イベントが発生する順序を変更することはできません。これらの検証ルールのみを記述できます。SUCCESSアプリケーションは、プロパティがTRUEまたはに設定されているコードから特定のオブジェクトを受け取るまで続行されませんFALSE

私が抱えている問題PO_APPROVAL_LOGは、PO承認をテーブルに記録することに関連しています。現在、PO_APPROVAL_LOGマネージャーが資格情報を送信するときにテーブルが挿入されます。これは、PO_HDRデータが入力される前に発生します。を含める必要があります。そのためには、データが入力PO_HDR.PO_NUMBERされるまで待ってから値を取得し、対応するエントリを更新する必要があります。実際に承認が必要なPOはごくわずかであり、テーブルには多くのアクションが表示されないはずです。PO_HDRPO_NUMBERPO_APPROVAL_LOGPO_APPROVAL_LOG

PO_HDRテーブルにトリガーを作成できません。

実験のために、aを使用してAFTER INSERTトリガーを作成し、データを入力する機会があった後にフェッチできるかどうかを確認しました。(はい、トリガーでひどい考えであることを私は知っています、それはただ遊びデータベースで実験することでした)。挿入とそれに続くトリガーの実行が終了するまで、アプリケーションが検証コードから応答を受け取らなかったため、これは機能しませんでした。PO_APPROVA_LOGwaitfor delayPO_NUMBERPO_HDRwaitfor delayTRUE

私の質問:SQLエージェントの仕事は可能な解決策でしょうか?1、2分ごとに実行する必要があります。私の懸念の1つは、これはデータベースに非常に負担をかけることでしょうか?ジョブが実行され、ログテーブルを更新するためにプロシージャを呼び出す必要があるかどうかを判断した場合(で1つ以上のNULL PO_NUMBER値が見つかりましたPO_APPROVAL_LOG)、おそらくそれは機能する可能性があります。

他に何かアドバイスはありますか?これは私にしばらくの間問題を与えてきました。

不明な点がございましたら、お問い合わせください。ありがとう!

4

2 に答える 2

1

SQLでそれを行う方法はありません。コードからこれを実行してみてください。

于 2012-02-09T18:04:55.047 に答える
0

これは少し回りくどいものになり、正確な設定に合わない可能性があります...

PO_APPROVAL_LOGテーブルからデータを収集する場合は、このテーブルをPO_HDRに結合するビューまたはストアドプロシージャを介して収集します。PO_HDRが更新されているかどうかを確認します。更新されていない場合は、PO_APPROVAL_LOG行を返さないでください。

この設定では、PO_APPROVAL_LOGテーブルを実際に更新することはありません。(ボーナス、IMO)

于 2012-02-09T20:36:10.383 に答える