1. ホーム
  2. sql

[解決済み] SQL Server のユーザー定義関数からエラーを報告する方法

2022-04-26 18:55:27

質問

SQL Server 2008でユーザー定義関数を書いています。もし、RAISERRORステートメントを含めようとすると、SQLは返します。

Msg 443, Level 16, State 14, Procedure ..., Line ...
Invalid use of a side-effecting operator 'RAISERROR' within a function.

しかし、実際には、この関数は何らかの入力を受け取りますが、その入力は無効である可能性があり、もし無効であれば、この関数が返すことのできる意味のある値は存在しません。では、どうすればいいのでしょうか?

もちろん、NULLを返すこともできますが、この関数を使う開発者がトラブルシューティングするのは難しいでしょう。ゼロ除算のようなこともできますが、これはエラーメッセージを生成しますが、誤解を招くものです。どうにかして、私自身のエラーメッセージを報告させる方法はないでしょうか?

解決方法は?

CASTを使用することで意味のあるエラーを投げることができます。

create function dbo.throwError()
returns nvarchar(max)
as
begin
    return cast('Error happened here.' as int);
end

すると、Sql Serverはいくつかのヘルプ情報を表示します。

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