• 締切済み

【SQLServer】例外処理・意図的に例外エラーを発生させる

お世話になってます。 現在、共通スカラ関数を作成しており、想定外の引数を与えられた場合は エラーにしたいと思っています。 SQLServerでは、意図的に例外エラーを発生させることが可能なのでしょうか? Oracleですと、「RAISE」という構文がありそれを使用しますが 変わるようなものを探してみたところ、あまりメジャーでないのか、 やり方がよくわかりませんでした。 SQLSERVERについて詳しい方教えていただけませんか? よろしくおねがいします。

みんなの回答

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.4

そうなんですよね。 SQL Serverの関数ではエラーを発生させることが出来ないのですよね。 内部でエラー分岐のTRY...CATCHも出来無かったかな? 私はこのような場合、戻り値を文字列してエラーメッセージを返します 数値の場合も文字列にして返し読み込んだアプリで数値か文字列かの判断 ただ数値の場合、帳票で使う場合を考えNullで返す場合が多いかも ここからは私的見解。 ストアドと違い関数はSelectの計算カラムとして使われるからエラーを起こすと逆にまずいような気がします。 データーが読めなくなるわけで・・・ Select自身を止めてしまうのは問題あると思いますからね。

mamiyak
質問者

お礼

そうですね。。 結局わたしもnullで返すことにしました。 (引数不正により計算不可能だった、という解釈で使用してもらいます。) ありがとうございました。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

#1です。そうですか。半端な知識でレスしてしまい失礼しました。

mamiyak
質問者

お礼

とんでもないです。助かりましたよ~ ありがとうございました。

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

スカラー/テーブル関数でRAISERRORは使えません。 SQL Server 2008のCDC(変更データキャプチャ)のシステム関数でも、RAISERRORが切れないため、内部的に無理やりエラーを発生させることにより、変なエラーメッセージが返るという例があります (変なメッセージでも出さないよりはいいでしょう、という趣旨がMSDNに書いてありました) それを考えてもスカラー関数で想定したエラーメッセージを発生させるのは難しいと思います。

mamiyak
質問者

お礼

ありがとうございます。 なるほど。。 なかなか不細工な仕様ですね。。。凹 無理だということがわかって悩みが解決されました。 ありがとうございました。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1
mamiyak
質問者

お礼

ありがとうございます。 ご紹介いただきましたページ、役に立ちました。 確かに関数内では使用できませんでしたが別の箇所で使用しました♪

関連するQ&A

  • LISPで例外を発生させるには?

    LISPで例外を発生させるにはどうしたらよいのでしょうか? もしくは、プログラムを強制終了させたいです。 エラー発生時に警告を出して止めるのですが、後から捕捉できる形式にできたらよりベターです。 VBのraise Cでいう exit; です。

  • 例外が発生するの英訳

    こんばんは。 プログラムを書く仕事をしています。英語はできません。 どうしても海外に問い合わせなければならないことがあり、以下の文の英訳をお願いします。 「SetEnable関数の引数にFALSEを渡すとアプリケーション終了時に例外が発生します。回避方法はありますか?」 という内容です。 よろしくお願いします。

  • VB.net 任意の例外を発生させるには・・・

    いつも参考にさせていただいています。 現在以下の環境にてアプリ作成を行っております。 OS:Windows XP SP2 言語:VB.net 2005 SP1 .netFrameWork SDK ver2.0 質問: 現在作成中のアプリにて、特定のエラー(System.Net.WebException)をCatchし、その動作を3回までリトライ可能にするPG作成を行っております。 但し、3回を超えても同じエラーが返された場合はその特定のエラー(System.Net.WebException)を例外として発生させたいのですが、動的にこの例外を発生させる術が分かりません。 尚、Err.Raiseにて動的にエラーを発生できるようですが、 System.Net.WebExceptionを発生させる為の引数の数値が 分かりません。 以下、サンプルを記述します。 ご存知の方、宜しくお願いします。 dim RetryCount as Integer Do While Not accessWeb(・・・) RetryCount += 1 If RetryCount <= 3 Then 'ログ出力("WebAccess失敗の為、リトライします。(" & RetryCount & "/3回目)") Else 'ログ出力("WebAccess失敗の為、異常終了。" ) ※※※※※ここで例外(System.Net.WebException)を発生させアプリを終了させたい。※※※※※ End If Loop Private Function accessWeb(・・・) As Boolean Try 例外(System.Net.WebException)が発生する可能性のある処理 Return True '正常終了時 Catch ex As System.Net.WebException Return False '例外発生 End Try

  • vb プログラムの起動と例外処理

    はじめまして プログラムの実行と例外処理に関して質問させていただきます。 現在,visual basic2005でプログラム(A)からvbで作成した別のプログラム(B)に引数を指定してから起動し,別のプログラム(B)が例外処理に関する方法を調べています。 プログラム(B)起動時に例外処理を用い,以下のようなエラーメッセージを表示させるにはどういった処理を構成すればよいでしょうか。 パス名が設定されていない場合,”ファイルのパス名が見つかりませんでした” 引数が指定されていない場合,”引数が指定されておりません” 原因が特定できないエラーが発生した場合,”原因不明のエラーが発生しました” プログラムの実行にはShellメソッドとSystem.Diagnostics.ProcessクラスのStartメソッドがあるという事がわかりましたが,上記2つのメソッドが自分の意図したい操作に適しているかまでは理解におよんでおりません。 まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

  • VBSの例外処理について

    VBScriptの例外処理は構文エラー以外にどんなものがありますか? できる限りでいいので教えていただけないでしょうか?? また、VBScriptの例外処理が発生した時に戻り値(%ERRORLEVEL%)が0になるのは何故でしょう? ※後者は素朴な疑問なのでスルーしても結構です。もしご存知でしたら教えてください。 ざっくりとした質問ですが、ご回答宜しくお願い致します。

  • SQLServerでの副問合せについて

    いつもお世話になります。 当方SQLServerをあまり使った事がなくSQLの組み方で少々てこずっております。そこでちょっとお知恵をお借りしたく質問致しました。 処理内容としましては、ある条件でテーブル内のデータを削除するって事なんですが、オラクルで記述するなら DELETE FROM AAAA WHERE (あああ,いいい) IN (SELECT あああ,いいい FROM BBBB GROUP BY あああ,いいい)  となるのですが、この構文をSQLServerで記述すると構文エラーとなってしまいます。 まあこの構文が実際には使えて私の記述がおかしいだけのかもしれないのですが、もし使えないのであればどのように記述すればよいのでしょうか? 申し訳ありませんが、宜しくお願いします。 ちなみにSQLServerは2000を使用しております。

  • 例外エラー時、例外発生箇所を取得するには

    XP、VB6.0で開発しております。 例外エラー時の処理について、教えて頂けますでしょうか。 予期せぬエラーが発生した時のため、エラーハンドルを設けて 相応の処理を実行しようと思うのですが 例外が発生したファイル名、関数名、ファイル行番号を取得するには どうすれば宜しいのでしょうか。 Cの__FILE__、__func__、__LINE__マクロに変わるような関数 もしくは方法をご存知の方、いらっしゃいましたらご教示願います。 今は以下のような処理を施しています。 (関数毎に、エラーハンドルを設け、範囲を絞り込む) 最悪、これで進めようと思うのですが、行番号が取れないので どこでエラーが発生したのか、正確に把握する事が出来ません。 TEST.frm ---------------------------------- Dim Const FILE_NAME As String = "TEST.frm" Private Sub TestFunction On Error Goto TestFunction_ErrHandle (省略) Exit Sub TestFunction_ErrHandle: ErrFunction(FILE_NAME, "TestFunction") 宜しくお願い致します。

  • Lag関数はないのでしょうか?

    SQLServer2005を使用しています。 OracleでいうところのLag関数とおなじような関数は、SQLServerにはないのでしょうか? オラクルと同じようにSQLを書くと、「組込関数ではない」とエラーが出てしまいます。 自分で調べて、以下のURLのように記述してみると、今度は「Rows付近に不適切な構文があります。」と言われてしまいます。。。 http://oraclesqlpuzzle.hp.infoseek.co.jp/db2/db2-8-1.html SQLServerでは、実現できないのでしょうか?

  • CFileのReadでの例外エラー#38が発生

    お世話になります。 Visual Studio2005にてC++のプログラムを作成しており、プログラム内で作成したcsvファイルをプログラム起動時に読み込むような動作を行っております。 そこで、件名のとおりの症状が発生しております。 具体的な症状としましては、csvファイルをCFileのメンバ関数Read()で読み出しているのですが、ファイル内の特定の箇所を読み出そうとしたときに、例外エラーが発生し、エラー番号を確認したところCFileException::m_IOsErrorが”38”となっていました。 ネットで調べたところ、エラー番号38はEOFエラーらしいのですが、普通EOFが見つかったのであればCFile::Read()の場合例外エラーは発生しないかと思います。また、msdnで調べたところファイルを非同期で読み込んだ場合には発生するような事が記載されておりましたが、CFile::Open時に非同期指定にはしておらずデフォルトの指定でファイルを開いております。 また、件のcsvファイルをOS上でコピー&ペーストをしようとすると、「エラー番号38により、データがコピーができない」といった警告文が表示され、コピーすることも出来ません。 このcsvファイルが破損した為なのかな?とは思っているのですが、そのはっきりした原因がわからずどうしたものかとはまっております。 もし同じ症状にあわれた方、対処方法をご存じの方がいらっしゃいましたら、情報を提供頂ければと思っております。 よろしくお願い致します。 開発環境) Windows CE 6.0 Visual Studio 2005

  • あらゆる例外に対応できるエラーハンドラ

    接続できなかったら例外発生、値がなかったら例外発生というのではなく、あらゆる例外に対応できるエラーハンドラって、書けないものでしょうか? error_log関数を使えば、簡単にファイルに書き込めますが、文章を自分で考えなくてはなりません。 error_log("エラーが発生しました",3,"err.log"); そうではなく、ゼロで除算すれば、ブラウザに、Warning: Division by zero in ~というのが表示される ので、このようなエラーメッセージをログに書き込むなり、メールで送信したいところです。 エラーハンドラの典型的な書き方や、とりあえず、これだけ書いとけ! というものはありませんか?

    • ベストアンサー
    • PHP