• 締切済み

PROCEDUREでのエラー内容取得

PROCEDUREでエラーが発生した場合のエラー内容を取得したいのですが ネットで調べたら @@ERROR にエラーコードが保存されるそうですが エラー内容がわかりません。エラーコード、エラー内容ともにログに 書き込みたいのですが、エラーメッセージはどうやったら取得できるのでしょうか? ERROR_MESSAGE() で取得できるという話を聞いたのですが 試してみたところ上記はNULLでした。 どなたかおわかりの方よろしくお願いいたします

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

Transact-SQL関連は違いがかなり大きいので、バージョンを記載しましょう。 とりあえずERROR_MESSAGE()がエラーにならないということから2005と推測しました。 エラートラップの構文はどう書かれていますか? BEGIN TRY (処理) END TRY BEGIN CATCH INSERT INTO error_log VALUES (ERROR_NUMBER(),ERROR_MESSAGE()) END CATCH ERROR_MESSAGE()は取れるはずです。かならずCATCHスコープの中に記載してください。

SAMOAJIN
質問者

お礼

ありがとうございました。できました。 TRYとCATCHの構造を知らなくて、こういう方法使用しておりませんでした。 どうもありがとうございました。

関連するQ&A

  • プロシージャ名の取得

    教えてください。 VBで現在実行しているプロシージャ名を取得指定のですがkのようなことは可能ですか? 可能ならばどのようにすればいいか教えてください。 現在実行ファイルにて起動しているのですが、どこかで「実行エラー」が発生しています。 この実行エラーの場所の特定のために、現在起動中のプロシージャ名をログに保存しようかと考えています。 また、その他このようなエラー箇所特定方法などがありましたら教えてください。 環境:VB6.0  Win2000

  • Access2013イベントプロシージャのエラー

    Access2010でコードビルダーで作成したイベントプロシージャをAccess2013で実行するとエラーが出ます。エラーメッセージは[OLEサーバまたはActive X コントロールとのコミュニケーション時に起こります。] ヘルプメッセージは[イベントのロジックの箇所が正しく設定されていない場合に起こります。たとえば、フォームのOnOpenプロパティが =[Field]とセットされている場合、エラーが起こります] (スミマセン、英語のACCESSを使用しているのでエラーメッセージも英語なので、上記は表示された英語エラーメッセージの意訳です) 2010のマクロビルダーで作成したイベントプロシージャは2013でも問題なく実行されます。 どのように対応したらいいのか教えていただけますでしょうか?

  • vbからストアドプロシージャ内発生のエラーメッセージ取得

    タイトル通りの質問です。例えば、重複キーエラー時等はクエリアナライザを使用してストアドプロシージャを実行した場合に、「PRIMARY KEY 違反、制約 'PK_xxx': オブジェクト 'tbl_xxx' には重複したキーは挿入できません。」という様なメッセージが返されます。このメッセージをVB側に返したいのですが、方法がわかりません。質問は以下の3つです。 1)上記の様なエラーの場合は、vb側でon error goto&errorsコレクションでエラーハンドリングは出来ないのでしょうか?(現状トラップしてくれません。) 2)出来ないのであれば、ストアド内でエラーメッセージを取得して、outputパラメータで返却するしかないのかなと思っております。 3)なぜか、create tableで既にあるテーブルを指定してわざとエラーを発生させた直後に@@errorでvb側にリターン値を返却してもempty値として返されます。なぜでしょう。 以上、3点について教えて下さい。(何れかでも構いません)よろしくお願いします。 環境:win2000,sqlserver2000

  • 「コンパイルエラー:プロシージャが大きすぎます。」を回避するには。

    「コンパイルエラー:プロシージャが大きすぎます。」を回避するには。 VB初心者です。 上記のようなコンパイルエラーが発生してしまいます。 現状のまま、上記エラーを回避する方法はあるでしょうか。 どなたかご教授願います。

  • ログ出力する内容について

    ログ出力する内容について 業務ロジックにおいて、ログ出力する内容ってどのようなものが効果的なのでしょうか? 処理続行できないようなマスタ不正や、DBデータ不正のようなエラー発生時は例外などでメッセージを出してしまうのが多いので、わざわざログ出力しなくても・・・とおもってしまいます。 デバッグは開発時には便利なのでこれはわかるのですが、本番時は使用しません。 アクセスログとかは必要ですが、業務ロジックとは別なので、業務ロジックにおいて、こんなログを出すと便利とかありましたら教えて頂けないでしょうか。 またログレベルの選定の1方針なども合わせて教えて頂けるとうれしいです。 昔みたのは画面のオペレーションで警告がある場合、warnで出力してエラーの場合はerrorで出力してたような気がします。 例えば一覧表示の中の項目の詳細をみようとして、すでに削除されていた場合(排他など)は警告メッセージを画面に出してwarnでログを出力する。 null参照など本来想定しないエラーの場合、エラーメッセージを画面に出してerrorでログを出力する。 ただ想定されるエラー(排他で削除されたデータを参照)をいちいちログ出力する意味はないと感じますし、null参照などのケースは例外のメッセージで十分な気がします。 それとも使い方が違うとかなのでしょうか? 例えば本来起こりえないエラーやユーザのオペレーションでは直らない(マスタ不正など)場合に、システム管理者が検知するためにログを出すなどでしょうか? エラーがでたということを検知するためにログ出力を行って、例外時のメッセージは解析のために使うとかなんでしょうか?

    • ベストアンサー
    • Java
  • ストアドプロシージャについて

    Access2003とSQL Server2005Expressです。 初歩的な質問で恐縮です。 以下のストアドプロシージャのデータ取得先を、テーブルではなく 別のストアドプロシージャにしたいのですが、 その方法がわかりません。 CREATE PROCEDURE テスト AS SELECT コード, 社名, 住所, 電話 FROM 名簿     ↑     これをテーブルではなく、別のストアドプロシージャを     指定したのですが・・・。     ここをストアドプロシージャ名にするとエラーになります。     どうすればよろしいでしょうか?

  • 【VBA-AC2000】カレントプロシージャ名を取得したい

    AC2000+MSSQL2000環境でVBAを使ってアプリケーション開発しています。 エラー時にユーザー定義関数を使ってカレントフォーム名やカレントコントロール名をメールで送るようにしています。 さらに追加して、どのプロシージャでえらーが起こっているのか知りたく、、コードの中でカレントプロシージャ名を取得する方法ってないでしょうか?

  • プロシージャの引数について

    DB : SQL Server 2005 プロシージャの引数にCSVファイルのフルパスを入れたいのですが、 エラーが出て困っています。 http://questionbox.jp.msn.com/qa262720.html ↑の回答も参考にしましたが、どうしても出来ません。 最初は以下のように書いていました。 BULK INSERT IDATA from ''+ @pass + '' with ( fieldterminator = ',', rowterminator = '\n' ) このときは、プロシージャを作る段階で↓のエラーメッセージが出ました。 >メッセージ 1038、レベル 15、状態 1、プロシージャ sss、行 30 オブジェクト名または列名がないか、空です。SELECT INTO ステートメントの場合は、各列に名前が付いていることを確認してください。その他のステートメントの場合は、空の別名を検索してください。"" または [] で定義された別名は許可されません。別名として、名前または 1 つのスペースを追加してください。 >メッセージ 319、レベル 15、状態 1、プロシージャ sss、行 30 キーワード 'with' 付近に不適切な構文があります。このステートメントが共通テーブル式または xmlnamespaces 句の場合、前のステートメントをセミコロンで終了してください。 また、上記の回答を参考にしたところ、プロシージャは作成できましたが、 引数を与えて実行する段階で↓のエラーメッセージが出ました。 >メッセージ 203、レベル 16、状態 2、プロシージャ sss、行 32 名前 'BULK INSERT IDATA from '\\・・・\・・・\取込.csv' with ( fieldterminator = ',',rowterminator = '\n')' は有効な識別子ではありません。 引数で与えるのでなく、直接入力した場合は出来ます。 よろしくお願いします (><)

  • ワトソンログ取得時のログサイズについて

    先日windows server 2003 にて不具合が発生したので、原因調査のためにワトソンログを確認しましたが、不具合発生時のログが取得されていませんでした。 「 ワトソン博士 」の「 クラッシュダンプの種類 」の項目が「 完全 」ではなく「 最小 」になっていたため、ログが取得されていなかったのだと思われます。なので、この設定を「 完全 」に変更し、再度同じ自称が発生した場合に原因調査ができるよう、ログを取得したいと考えています。 クラッシュダンプの種類を「 完全 」とした場合、とあるサイトではログサイズは最大800MBになると書かれていましたが、 (1)ほとんどエラーが発生しない端末でもログサイズは800MBになるのか? (2)ログサイズが800MBに達した状態でエラーが発生した場合、最も古いログを削除して最新のエラーを保持するのか? 上記2点が疑問となっております。 おわかりになる方はご回答をお願い致します。 もしこの質問内容についての答えが記載されているページがありましたら、そちらも併せて教えて頂ければと思います。 以上です。

  • Accessのプロシージャ名が勝手に変わります

    Accessの古いバージョン(2000)で作られたMDBのアプリがありまして、 それを2010で動作検証しようとした所、MDBを開くところから下記の ようなエラーが出ます。  「イベントプロパティに指定した式 エラー時 でエラーが発生しました:   名前が適切ではありません。 [・・・・(プロシージャ名)] エラーメッセージに表示されているプロシージャ名を元に調べた所、 どうもMDBを開く時に勝手にプロシージャ名が変わっているようなのです。 例えば「Private Sub テキスト1_GotFocus()(1は全角)」が「Private Sub テキスト_GotFocus()」になったり、 「Private Sub データ削除()」が「デー()」になったりします。 勝手に名前が変わったことで、同じ名前のプロシージャが複数存在 することになって、上記のエラーが発生しているようです。 あまり動作環境が無いため試せていませんが、少なくとも2000では正常です。 これは仕様なのでしょうか。 なにか回避策はあるのでしょうか。 何かごぞんじでしたらアドバイス頂ければと思います。 よろしくお願い致します。