goo blog サービス終了のお知らせ 

I Love DB

DBを愛する人のブログ

SQL Serverのユーザー定義関数でできないこと

2011-03-01 18:18:21 | インポート
SQL Serverのユーザー定義関数を実装する場合,いくつか注意するべき点があります。

1.TRY...CATCHによるエラー処理を実装できない。
以下のようなIDから名称を取得するような関数を作ったとします。

この関数の名称返却に複雑な内部ロジックが必要となったとします。そのためにエラー処理としてTry Catchを利用しようとすると,エラーになります。

エラーメッセージ443の「副作用のある演算子 'BEGIN TRY' を関数内で使用することはできません。」という内容から,Try Catchはデータベースに対する更新と同じように見なされていることがわかります。仕方がありません。他の方法でエラー処理を実装することになります。

2.PRINT文が使用できない。
関数を実装もしくはデバッグするために,内部変数をPRINT文で表示させたいと思うことがあります。
例えば,前例の関数にデバッグ用のPRINT文を追加するとどうなるでしょうか。

こちらもエラーになります。
「副作用のある演算子 'PRINT' を関数内で使用することはできません。」と言われても,と思ってしまうのは自分だけでしょうか。
これは,恐らくPRINTの出力が,アプリケーションに返却されることが原因なのだろうと思います。とは言っても,PL/SQLだと関数内にEXCEPTIONやDBMS_OUTPUT出力を記載できるのに比べ,SQL Serverの関数定義は,実に制約が多いと思います。



コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。