- 締切済み
【SQLServer】例外処理・意図的に例外エラーを発生させる
お世話になってます。 現在、共通スカラ関数を作成しており、想定外の引数を与えられた場合は エラーにしたいと思っています。 SQLServerでは、意図的に例外エラーを発生させることが可能なのでしょうか? Oracleですと、「RAISE」という構文がありそれを使用しますが 変わるようなものを探してみたところ、あまりメジャーでないのか、 やり方がよくわかりませんでした。 SQLSERVERについて詳しい方教えていただけませんか? よろしくおねがいします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- noah7150
- ベストアンサー率46% (116/251)
そうなんですよね。 SQL Serverの関数ではエラーを発生させることが出来ないのですよね。 内部でエラー分岐のTRY...CATCHも出来無かったかな? 私はこのような場合、戻り値を文字列してエラーメッセージを返します 数値の場合も文字列にして返し読み込んだアプリで数値か文字列かの判断 ただ数値の場合、帳票で使う場合を考えNullで返す場合が多いかも ここからは私的見解。 ストアドと違い関数はSelectの計算カラムとして使われるからエラーを起こすと逆にまずいような気がします。 データーが読めなくなるわけで・・・ Select自身を止めてしまうのは問題あると思いますからね。
- nora1962
- ベストアンサー率60% (431/717)
#1です。そうですか。半端な知識でレスしてしまい失礼しました。
お礼
とんでもないです。助かりましたよ~ ありがとうございました。
- jamshid6
- ベストアンサー率88% (591/669)
スカラー/テーブル関数でRAISERRORは使えません。 SQL Server 2008のCDC(変更データキャプチャ)のシステム関数でも、RAISERRORが切れないため、内部的に無理やりエラーを発生させることにより、変なエラーメッセージが返るという例があります (変なメッセージでも出さないよりはいいでしょう、という趣旨がMSDNに書いてありました) それを考えてもスカラー関数で想定したエラーメッセージを発生させるのは難しいと思います。
お礼
ありがとうございます。 なるほど。。 なかなか不細工な仕様ですね。。。凹 無理だということがわかって悩みが解決されました。 ありがとうございました。
- nora1962
- ベストアンサー率60% (431/717)
RAISERRORが近いでしょうか。 http://technet.microsoft.com/ja-jp/library/ms177497.aspx
お礼
ありがとうございます。 ご紹介いただきましたページ、役に立ちました。 確かに関数内では使用できませんでしたが別の箇所で使用しました♪
お礼
そうですね。。 結局わたしもnullで返すことにしました。 (引数不正により計算不可能だった、という解釈で使用してもらいます。) ありがとうございました。