SQL Server の関数は、 特定のタスクを実行するための SQL ステートメントのセット 。関数は入力パラメータを受け取り、アクションを実行して、結果を返します。関数は常に単一の値またはテーブルを返すことに注意してください。関数の主な目的は、共通のタスクを簡単に複製することです。関数を一度構築すれば、ニーズに応じて複数の場所で使用できます。 SQL Server では、データベース テーブルのレコードを挿入、削除、または更新する関数の使用は許可されていません。
SQL Server 関数を作成するためのルールは次のとおりです。
- 関数には名前が必要です。名前の先頭を @、$、#、またはその他の同様の文字などの特殊文字にすることはできません。
- 関数を操作できるのは SELECT ステートメントだけです。
- SQL の SELECT クエリでは、AVG、COUNT、SUM、MIN、DATE、その他の関数などの関数をどこでも使用できます。
- 関数が呼び出されるたびにコンパイルされます。
- 関数は値または結果を返さなければなりません。
- 関数は入力パラメータのみを使用します。
- 関数内では TRY ステートメントと CATCH ステートメントを使用できません。
関数の種類
SQL Server は、関数を次の 2 つのタイプに分類します。
- システム機能
- ユーザー定義関数
両方のタイプについて詳しく説明します。
システム機能
システムによって定義される関数は、システム関数と呼ばれます。言い換えれば、すべての 組み込み関数 サーバーによってサポートされる機能はシステム機能と呼ばれます。組み込み関数により、特定のタスクを実行する際の時間を節約できます。これらのタイプの関数は通常、SQL SELECT ステートメントと連携して値を計算し、データを操作します。
SQL Server で使用されるいくつかのシステム関数のリストを次に示します。
- 文字列関数 (LEN、SUBSTRING、REPLACE、CONCAT、TRIM)
- 日付と時刻の関数 (datetime、datetime2、smalldatetime)
- 集計関数 (COUNT、MAX、MIN、SUM、AVG)
- 数学関数 (ABS、POWER、PI、EXP、LOG)
- ランキング関数 (RANK、DENSE_RANK、ROW_NUMBER、NTILE)
次の図は、SQL Server で使用されるすべての組み込みデータベース関数を示しています。
ユーザー定義関数
機能 ユーザーによって作成された システム データベースまたはユーザー定義データベース内の関数は、ユーザー定義関数と呼ばれます。 UDF 関数はパラメーターを受け入れ、アクションを実行し、結果を返します。これらの機能は、複雑なビジネス ロジックをカプセル化し、ニーズに応じてどこでも再利用できるようにすることで、開発を簡素化するのに役立ちます。ユーザー定義関数を使用すると、データのクエリに必要なコードの記述がはるかに簡単になります。また、クエリの可読性と機能性も向上し、他のユーザーが同じ手順を複製できるようになります。
SQL Server では、ユーザー定義関数を主に次の 2 種類に分類します。
Javaの配列リスト
- スカラー関数
- テーブル値関数
これらの UDF 関数について説明します。
スカラー関数
SQL Server のスカラー関数は常に 単一または複数のパラメータを受け入れ、単一の値を返します 。スカラー関数はコードを簡素化するのに役立ちます。多数のクエリに含まれる複雑な計算があると仮定します。このような場合、式をカプセル化して各クエリではなく各クエリで使用するスカラー関数を構築できます。
以下は、SQL Server でのスカラー関数の作成を示す構文です。
CREATE FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
上記の構文パラメーターについては、以下で説明します。
まず、関数の後に関数名を定義します。 関数の作成 キーワード。スキーマの名前はオプションです。スキーマ名を定義しない場合、SQL Server はデフォルトのスキーマを使用します。 だぼ 。次に、次のリストを定義します。 パラメーター 括弧で囲まれています。 3 番目に、関数のステートメントを書きます。 戻り値 ステートメントでは、戻り値のデータ型を定義します。最後に、関数の本体内に値を返す RETURN ステートメントを追加しました。
例
この例では、次の関数を作成します。 純売上高を計算する 数量、価格、割引額に基づいて:
CREATE FUNCTION udfNet_Sales( @quantity INT, @price DEC(10,2), @discount DEC(3,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @price * (1 - @discount); END;
この関数を使用して、定義されたテーブル内の任意の販売注文の純売上高を計算できるようになりました。
次の図は、スカラー関数が存在する場所を示しています。
スカラー関数は、SQL Server の組み込み関数と同じように呼び出すことができます。たとえば、上記の udfNet_Sales 関数を次のように呼び出すことができます。
SELECT dbo.udfNet_Sales(25, 500, 0.2) AS net_sales;
この関数を実行すると、純売上高が返されます。
SQL Server では、 ALTER を使用してスカラー関数を変更するには キーワード。これを行うための構文は次のとおりです。
ALTER FUNCTION schema_name.function_name (parameter_list) RETURNS data_type AS BEGIN statements RETURN value END
以下のステートメントを使用して、SQL Server データベースからスカラー関数を削除できます。
DROP FUNCTION [schema_name.]function_name;
テーブル値関数
SQL Server のテーブル値関数は、 ユーザー定義関数 テーブル型のデータを返します。この機能以来、 戻り値の型はテーブルです 、テーブルと同じように使用できます。
int の文字列
テーブル値関数は次の 2 つのタイプに分類できます。
1. インラインテーブル値関数
この UDF 関数は、関数によって実行されたアクションに基づいてテーブル変数を返します。テーブル変数の値を決定するには、単一の SELECT ステートメントを使用する必要があります。
例
math.pow Java
次の例では、テーブル値関数を作成し、employee テーブルのデータを取得します。
--It creates a table-valued function to get employees CREATE FUNCTION fudf_GetEmployee() RETURNS TABLE AS RETURN (SELECT * FROM Employee)
この構文では、 返品表 関数がテーブルを返すことを指定します。無いので 始まり...終わり ステートメントでは、単に従業員テーブルのデータをクエリします。また、パラメータがない場合は直接呼び出されます。
以下を使用してテーブル値関数を呼び出すことができます。 から の条項 選択する クエリ。 例えば 、上記を呼び出すことができます udf_Get従業員 以下のように機能します。
SELECT * FROM udf_GetEmployee();
この関数を実行すると、以下の結果が返されます。
SQL Server では、CREATE キーワードの代わりに ALTER キーワードを使用してテーブル値関数を変更することもできます。スクリプトの残りの部分は同じです。
複数ステートメントのテーブル値関数 (MSTVF)
このUDF関数は テーブル変数を返します 関数によって実行されるアクションに基づいて。結果を生成するために単一または複数のステートメントを含めることができ、複数のステートメントの結果を表形式で返す関数でもあります。この関数では複数のステートメントを実行し、返されたテーブルに集計結果を取得できるので便利です。この関数は、戻り値としてテーブル変数を使用して定義できます。関数内で複数のクエリを実行し、このテーブル変数にデータを挿入します。
次の例では、関数名を作成します。 「多価」 'を返す @従業員' テーブル。これには、id、emp_name、salary という名前の 3 つのフィールドが含まれています。 '従業員' INSERT ステートメントを使用してテーブルを作成し、次に UPDATE ステートメントを使用して従業員名を更新します。
CREATE FUNCTION MULTIVALUED() RETURNS @Employee TABLE (id INT, emp_name VARCHAR(50), salary INT) AS BEGIN INSERT INTO @Employee SELECT E.id, E.emp_name, E.salary FROM Employee E; UPDATE @Employee SET emp_name = 'Graeme Smith' WHERE id = 3; RETURN END
SELECT クエリの FROM 句を使用して、複数ステートメントのテーブル値関数を呼び出すことができます。 例えば 、上記の関数を次のように呼び出すことができます。
SELECT * FROM MULTIVALUED();
この関数を実行すると、以下の結果が返されます。
テーブル値関数はいつ使用する必要がありますか?
テーブル値関数は通常、パラメーター化されたビューとして使用されます。テーブル値関数は、テーブルが使用されている場所であればどこでも使用できるため、ストアド プロシージャよりも柔軟性が高くなります。
結論
この記事では、SQL Server で使用される関数の概要を完全に説明します。ここでは、SQL Server で使用される主にシステム関数とユーザー定義関数の 2 種類の関数について学習しました。