2016-06-28 9 views
0

SQL Serverエージェントによって実行されているときに、一部のデータを処理するために作成したストアドプロシージャが正しく動作しないような問題があります。私は手動ですべてを正常に動作するジョブを実行する場合。私もエラーはありません。SQL ServerストアドプロシージャがSQL Serverエージェントによって実行されているときに動作しないようです

基本的なプロセスは、3つのソーステーブル(A、B、C)があり、それぞれ異なるサービスタイプ用です。それらは値を計算するために使用され、計算プロセスは毎年異なるため、複数の結果があるため、ID B43は2015年と2015年/ 16年の財務年度に対応する結果15と結果16を持ちます。最終結果は、ID、タイプ、および各レコードの両方の結果値を含むマスター表に保管されます。

この作業を行うために、最初に14/15計算、次に15/16計算を順番に実行する6つのストアドプロシージャがあります。

各ストアドプロシージャの一般的な構造は、データを取得し、マッピングテーブルに基づいて操作し、単にCalculationInputテーブルを作成することです。これが完了すると、実際の計算が行われ、その結果は一時テーブル#Resultsに格納されます。 tempテーブルが構築された後、いくつかのインデックスを作成し、別のストアドプロシージャを呼び出して、会計年度をパラメータとして渡します。これはtempテーブルを取り、マスタテーブルに対して挿入更新を行います。その後、ストアドプロシージャが終了し、次のストアドプロシージャが呼び出されます。

StoredProcA15 -> InsUpdProc 
StoredProcB15 -> InsUpdProc 
StoredProcC15 -> InsUpdProc 
StoredProcA16 -> InsUpdProc 
StoredProcB16 -> InsUpdProc 
StoredProcC16 -> InsUpdProc 

私が以前に言ったように、私はジョブを右クリックして実行すると、これは完全にうまく動作します。しかし、私が1週間待ってマスターテーブルを見ると、ソーステーブルとCalculationInputテーブルにあるにもかかわらず、新しいレコードはそこにありません。私はその後、一時テーブルを構築するコードのセクションを実行すると、そこに結果が表示されます。

私は、失敗の原因を推測するには、挿入/更新プロシージャを呼び出す必要があります。 SQL Serverの並行性についてさらに詳しく知ることなく、親ストアドプロシージャが、挿入/更新プロシージャが終了して次のストアドプロシージャに移動する前に終了するのを待機していないかどうか疑問に思っています。

これは可能ですか?もしそうなら、それを修正する最良の方法は何ですか?

+0

何[SQL Serverエージェントのエラーログ]について(https://msdn.microsoft.com/en-us/library/ms175488(V = SQL.105).aspxのを)支援を期待? –

+0

エラーメッセージなし – Matt

答えて

0

私には権利問題のように聞こえます。 Windowsサービス "SQL Serverエージェント"が実行されていることをユーザーIDで確認します。トラブルシューティングを行うには、dbの権限を持つWindowsログインに変更し、パスワードが期限切れにならないようにしてください。これを行うには

コントロールパネルから - >管理ツール - >サービス---> SQLエージェント - >右クリック - >プロパティ - > [ログオン]タブを - >このアカウント - - >あなたのウィンドウのID/pswd - >保存するためにokをクリックしてください

これは、5分ごとに実行する必要があるスケジュールでこれを試してください(だからあなたは笑いを待つ必要はありません)スケジューラを使用して数回実行するかどうかを確認します。

Windowsからログオフしても、それでも続行する必要があります。

+0

時間の90%で動作しますが、奇妙なことです。私はそれが決してうまくいかない許可のものだったと思うだろう – Matt

関連する問題