9

SQL Server 2005で非CLRユーザー定義関数を記述したいと考えています。この関数は入力文字列を受け取り、出力文字列を返します。入力文字列が無効な場合は、呼び出し元にエラーを示す必要があります。ユーザー定義関数でのエラー処理

私の最初の考えは、RAISERRORを使用して例外を発生させることでした。ただし、SQL ServerはこれをUDFの内部では許可しません(ただし、CLRベースのUDFで例外を発生させることができます)。

私の最後の手段は、入力値に誤りがある場合は、関数からNULL(またはその他のエラーインジケータ値)を返すことです。

  1. は、それが使われているので、私は(有効な入力に応じて、NULLを返すことができないようにし、発信者に有益な情報を提供していません:それはしかし、私は、このオプションを好きではありませんエラーコードとして)。

SQL Serverのエラーで機能を停止する呼び出し元に適した方法はありますか?

答えて

7

SQL ServerのUDFはこれに限られているようです。

あなたは本当にそれについて多くのことをすることはできません - それは(今のところ)それだけです。 UDFを定義して、戻り値(エラーの場合はNULLを返すなど)によってエラー状態を返信できるようにするか、ストアドプロシージャを作成する必要があります。より多くのエラー処理が可能で、RAISERRORなどが可能です。

したがって、エラー条件の特定のシグナリングを必要としないように設計するか、ストアドプロシージャ(複数のOUTPUTパラメータを持つことができるため、データと共にエラーコードも返すことができます)ペイロード、必要な場合)、またはUDFの管理CLRコード

申し訳ありません申し訳ありませんより良いアイデアはありません - 今のところ、私は恐れています、あなたの選択です - あなたの選択を取る。

マルク・

+0

私はそれほど期待はしましたが、私は尋ねると思っていました。ありがとう。 –

+1

sprocsの問題は、関数を使ってインラインで呼び出すことができないということです。 –

+0

@MikeKに同意します。私がUDFを使用しており、完全なstored_procedureではない全理由は、インライン使用のためです。 新しいバージョンのSQL Serverでこの質問に対する答えが変更されましたか? (例:2016) – ColinMac

1

重複質問here、この考えに基づいての答えで与えられた可能性のある解決策があります:それは作品

Msg 245, Level 16, State 1, Line 1 
Conversion failed when converting the varchar value 'Error message here.' to data type int. 

return cast('Error message here.' as int); 

このような何かをスローしますスカラー値のUDFではOKですが、テーブル値のUDFでは有効ではありません。

+0

予期したテーブルフォームにエラーテキストを返すことは可能でしょうか? – ColinMac