こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

お世話になってます。

現在、共通スカラ関数を作成しており、想定外の引数を与えられた場合は
エラーにしたいと思っています。

SQLServerでは、意図的に例外エラーを発生させることが可能なのでしょうか?
Oracleですと、「RAISE」という構文がありそれを使用しますが
変わるようなものを探してみたところ、あまりメジャーでないのか、
やり方がよくわかりませんでした。


SQLSERVERについて詳しい方教えていただけませんか?
よろしくおねがいします。

投稿日時 - 2009-08-07 10:48:22

QNo.5188682

困ってます

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

そうなんですよね。
SQL Serverの関数ではエラーを発生させることが出来ないのですよね。
内部でエラー分岐のTRY...CATCHも出来無かったかな?

私はこのような場合、戻り値を文字列してエラーメッセージを返します
数値の場合も文字列にして返し読み込んだアプリで数値か文字列かの判断
ただ数値の場合、帳票で使う場合を考えNullで返す場合が多いかも

ここからは私的見解。
ストアドと違い関数はSelectの計算カラムとして使われるからエラーを起こすと逆にまずいような気がします。
データーが読めなくなるわけで・・・
Select自身を止めてしまうのは問題あると思いますからね。

投稿日時 - 2009-08-07 17:05:57

お礼

そうですね。。

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

ありがとうございました。

投稿日時 - 2009-08-10 13:07:18

ANo.3

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

投稿日時 - 2009-08-07 13:28:33

お礼

とんでもないです。助かりましたよ~

ありがとうございました。

投稿日時 - 2009-08-10 13:05:28

ANo.2

スカラー/テーブル関数でRAISERRORは使えません。

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

投稿日時 - 2009-08-07 11:58:56

お礼

ありがとうございます。

なるほど。。
なかなか不細工な仕様ですね。。。凹

無理だということがわかって悩みが解決されました。
ありがとうございました。

投稿日時 - 2009-08-10 13:04:54

ANo.1

RAISERRORが近いでしょうか。
http://technet.microsoft.com/ja-jp/library/ms177497.aspx

投稿日時 - 2009-08-07 11:13:56

お礼

ありがとうございます。
ご紹介いただきましたページ、役に立ちました。

確かに関数内では使用できませんでしたが別の箇所で使用しました♪

投稿日時 - 2009-08-10 13:03:19

あなたにオススメの質問