SQL Serverでは、スカラーUDF、またはスカラーユーザー定義関数は、単一の値を返すユーザー定義関数です。
これは、テーブルの形式で結果セットを返すテーブル値関数とは対照的です。
ユーザー定義関数は、T-SQL UDFまたはCLR(共通言語ランタイム)UDFのいずれかとして記述できます。 CLRを使用すると、任意の.NETFrameworkプログラミング言語を使用してマネージコードでUDFを作成できます。これらの関数は、T-SQLまたはその他のマネージコードにアクセスできます。
例1-基本的なスカラーUDF
これは、基本的なT-SQLスカラーUDFを作成するために使用されるコードの例です。
CREATE FUNCTION dbo.ufn_discountPrice( @price DECIMAL(12,2), @discount DECIMAL(12,2) ) RETURNS DECIMAL (12,2) AS BEGIN RETURN @price * (1 - @discount); END;
このスカラーUDFは2つのパラメーターを受け入れます。 @price
および@discount
。これらは、関数が呼び出されるたびに引数として関数に渡されます。この関数は、これらの引数の値を取得し、それらの値を使用して計算を実行してから、結果の値を返します。この場合、割引価格が返されます。
例2–UDFを呼び出す
UDFが作成されると、必要なときにいつでもT-SQLコード内で呼び出すことができます。
UDFを呼び出す例は次のとおりです。
SELECT dbo.ufn_discountPrice(100, .2) AS Result;
結果
+----------+ | Result | |----------| | 80.00 | +----------+
計算列でスカラーUDFを使用することもできます。これは、別のテーブルのデータにアクセスするために計算列が必要な場合に特に便利です。
機能オプション
スカラーUDFを作成する場合、関数に適用できるさまざまなオプションがあります。
たとえば、スキーマにバインドするかどうかを指定できます。暗号化するように指定できます。 EXECUTE AS
を指定することもできます ユーザー定義関数が実行されるセキュリティコンテキストを指定する句。
ユーザー定義関数を作成または変更するときに提供できるオプションの詳細なリストについては、Microsoftのドキュメントを参照してください。
パラメータデータ型
T-SQL関数の場合、CLRユーザー定義型とユーザー定義テーブル型を含むすべてのデータ型は、タイムスタンプを除いて許可されます。 および非スカラーのカーソル およびテーブル タイプ。
CLR関数の場合、テキストを除くすべてのデータ型(CLRユーザー定義型を含む)が許可されます。 、 ntext 、画像 、ユーザー定義のテーブルタイプ、タイムスタンプ データ型、および非スカラーのカーソル およびテーブル タイプ。
戻りデータ型
T-SQLスカラーUDFの戻りデータ型は、タイムスタンプ以外の任意のデータ型にすることができます。 および非スカラーのカーソル およびテーブル タイプ。
CLR関数は、テキスト以外の任意のデータ型を使用できます 、 ntext 、画像 、タイムスタンプ 、および非スカラーカーソル およびテーブル タイプ。
T-SQL関数とCLR関数はどちらも、戻り値にCLRユーザー定義型を使用できます。