• ベストアンサー

ストアドプロシージャのエラーメッセージ取得

現在、職場で2008R2の環境でSPを書いているのですが、エラーメッセージの取得方法がわかりません。 「@@error」でエラー番号は取得できますが、同じような感じでメッセージは取得できないでしょうか? error_messageが使えれば楽なのですが、開発ルール上TRY~CATCHが使えないので・・・。 どなたか、ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

ANo1です。 大変失礼しました。 >「@@error」でエラー番号は取得できますが、 >同じような感じでメッセージは取得できないでしょうか? ですが、この機能はなかったです。 Try Catchができるようになって、SQL Server2005からできるようになったという話でした。 (ということでTry Catch内でないと不可。) ・・・昔のソースを確認したところ、@@errorのコードに応じてプログラム内で固定のメッセージを  出力していました。(忘れていました。) ## 大昔に、SQL Server2000で、これで取れるのでは・・・ダメじゃない。 ## とやった間違いをまたやってしまいました。 ということで、ANo1では望んでおられることはできませんので削除扱いしてください。

kyama4832
質問者

お礼

早速のお返事ありがとうございます。 やっぱり無理なのですね・・・。 それがわかっただけでも収穫でした。 (できるかどうか判らないのが一番気持ち悪いので) きっぱりあきらめて別の方法を模索します。

その他の回答 (1)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

マニュアルの@@ERRORの説明より。 http://msdn.microsoft.com/ja-jp/library/ms188790.aspx 「直前のステートメントでエラーが発生した場合は、エラー番号が返されます。エラーが sys.messages カタログ ビューのエラーであった場合、そのエラーに対応する sys.messages.message_id 列の値が @@ERROR に含まれます。@@ERROR エラー番号に関連付けられているテキストは、sys.messages で表示できます。」 の最終行を見てもらって、sys.messagesを探す。 マニュアルのsys.messages (Transact-SQL)の説明。 http://msdn.microsoft.com/ja-jp/library/ms187382.aspx ということで、 select text from sys.messages where message_id = エラーメッセージの番号 で取得できるはずですが。

kyama4832
質問者

お礼

ご回答ありがとうございます。 教えていただいたマニュアルを確認し、sys.messagesを見てみたのですが、 ここにはエラーメッセージの定型文が設定されているみたいです。 最初の質問が悪かったみたいですが、今回取得したい情報は、 コンソールに出力される最終的なエラー文言なので、ちょっと要件を満たせそうにないです・・・。

関連するQ&A

  • 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

  • エラー発生時のプログラムの行番号の取得 VB2005

    エラー発生時にログを残すようにプログラムを書いているのですが。 Try  処理・・・ Catch  ログを書く処理 End Try エラーが発生した箇所の行番号は取得できないものでしょうか? アドバイスをいただけたら幸いです。 開発環境 VB2005 WinXP Pro

  • ストアドプロシージャについて

    お知恵をお持ちの方、本当に助けてください。 実は今仕事で「SQLServer2005 EnterpriseEdition」を 使用しています。 その中で、 「ALTER DATABASE dbname ADD FILEGROUP FG_DATE01」 というようなトランザクションがあります。この「FG_DATE01」を つきが変わるごとに「FG_DATE02」のようにどんどん追加していく 用にSPを作成したいのですが問題が発生してしまいました。 「ALTER DATABASE dbname ADD FILEGROUP @sFG_NAME」 のように変数を設定すると・・・ 「メッセージ 102、レベル 15、状態 1、行 2 '@sFG_NAME' 付近に不適切な構文があります。」 とエラー文が吐き出されてしまいます。 もしかして、トランザクションALTERには変数の 設定ができないのでしょうか? そこがネックで大変困っています。 どなたか、お知恵をお貸しください。 実行環境 OS:WindowsXP DB:SQLServer2005 EnterpriseEdition CPU:Pen4 2.4GHz Mem:1GB HDD:120GB 以上です。本当に宜しくお願いします。

  • ネットワーク上のPCにアクセスできなかった場合のエラーの取得

    WindowsXP,VB6.0,SP6 で開発しています。 タイトル通りなのですが、 ネットワーク上のPCの共有フォルダの有無を確認して、 なければエラーという処理をしているのですが、 そもそも接続できなかった場合のエラーはどう取得すればいいのでしょうか? どうぞ、ご教授よろしくお願いしますm(_ _)m

  • ストアドプロシージャによる動的SQLについて

    いつもお世話になっています。 SQLServer・ストアドプロシージャの、WHERE句を動的にしたいのですがうまくできません。 やりたいことは、履歴テーブルの受付、回答が済んでいる件数を取得したいのです。 回答時間は0時から5時までを一まとめ、20時から23時を一まとめ、その他は一時間毎に抽出したいのです。 CASE文で書いたのですが、エラーが起こってしまいます。 どのように書いたらよいのかご教授下さい。 受付時間が8時代の件数を取得する時、 このように書きました。 DECLARE @from_date datetime DECLARE @to_date_last datetime DECLARE @answer_count int SET @from_date = '2004/04/06' SET @to_date_last = '2004/06/05' SET @answer_time = 9 SELECT Count(R.受付時間) FROM 履歴 AS R WHERE LEFT(CONVERT ( varchar(20) ,R.受付時間, 8),2) = '08'    AND R.受付時間 between @from_date and @to_date_last CASE  WHEN @answertime = 5 THEN    AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) <= '0' + LEFT( Convert(varchar(20),@answer_time),1)  WHEN @answertime > 5 AND @answertime < 10 THEN    AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) = '0' + LEFT( Convert(varchar(20),@answer_time),1)  WHEN @answertime > 10 AND @answertime < 20 THEN    AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) = Convert(varchar(20),@answer_time)  WHEN @answertime = 20 THEN    AND LEFT(CONVERT ( varchar(20) ,R.回答時間, 8),2) >= Convert(varchar(20),@answer_time) END

  • SQLの重大度エラーがうまく検知できません

    お世話になっています。 WindowsXP(SP3)、SQL2005(SP3)、VB6.0(SP6)で開発を行っています。 今、データベースにINSERTするトリガを作成していますが、TRY-CATCHがうまくいきません。今現在のコードは、次のようになっています。 ---コードはじめ DECLARE @ERR VARCHAR (2000) DECLARE @STR VARCHAR (2000) DECLARE @res int begin try EXEC @res = sp_executesql N'INSERT INTO TEST (SEIYMD,ZENYYYYMM,STYMD,SIMEBI) VALUES (null,0,0,0)'     if @res<>0 begin     raiserror('テストエラー1',11,1) end end try BEGIN CATCH     raiserror('テストエラー2',11,1) END CATCH ---コード終わり ここで、TEST(SEIYMD,ZENYYYYMM,STYMD,SIMEBI)は、すべてnumeric型で、null型を認めていません。 調べたところ、これでCATCHステートメントへ飛ぶようになると思うのですが、うまくいきません。 この原因、対策等を知っていましたら、ご教授ください。お願いいたします。

  • outlook2007のエラーメッセージ

    outlook2007(SP3)を使っています。 ここ数日、立ち上げた際に毎回添付のようなエラーメッセージが表示されるようになりました。しばらく経つと消えるみたいですが。どのように対処したらよろしいのでしょうか。お詳しい方いらっしゃいましたらご教授頂ければ幸いです。よろしくお願いいたします。

  • OEでのエラーメッセージ

    メッセージ番号 1 は取得できませんでした。 アカウント : 'xxx', サーバー : 'xxx', プロトコル : POP3, サーバーの応答 : '-ERR problem retrieving message.', ポート : 110, セキュリティ (SSL): なし, サーバー エラー : 0x800CCC90, エラー番号 : 0x800420CD

  • エラーメッセージ

    過去ログを見ましたが解らないので質問します。 動画ファイルを外付けHDDに数本づつフォルダーに入れて管理しています。 その中の一つのフォルダーを開くとエラーメッセージが出てしまいます。 「問題が発生したためにExpiorer.EXEを終了します」 と言うエラーメッセージ出ます。 マイクロソフトに報告してください。と出るので報告をすると、その画面は消えます。 XPのサポートを見たらSP3をインストールしてください。 と出ていたので確認をしたところ、すでにインストールしてあります。 念のためUPdateをしたところ16ケ更新が出てきたのでインストールしたのですが 治りませんでした。相変わらずエラーメッセージが出てきてそのフォルダーは 開けません。それでそのフォルダーを廃棄するとまた別のフォルダーが同じようになります。 一年ほど前にIE6からIE8にバージョンアップしました。 原因とメッセージが出ないで作業ができる方法を どなたか詳しい方ご教授お願いします。 OSはXP ブラウザはIE8 SP3です。 宜しくお願いします。

  • ストアドプロシージャのbegin、end

    下記の様なストアドプロシージャを作成し、VB側から実行させています。 どうしても、★SQL文2★の後のreturn文を実行してくれません。 (VB側ではreturn値が0と判断します。) このreturn文を★SQL文2★の前に移動すると、return値が-1として正常に取得できます。 begin、endのブロックの記述に何か間違いがあるのでしょうか? 環境:sqlserver2000,windows2000,vb6 よろしくお願いします。 CREATE PROCEDURE [sp_AAA] @PARAM1 varchar(16) AS begin if (~) begin ★SQL文1★ if (@@ERROR <> 0) begin return @@ERROR end end ★SQL文2★ return -1 ←ココ end