SQL ServerのFUNCTION(関数)
- 24-07-2022
- Toanngo92
- 0 Comments
MS SQL Serverでは、関数はSQLステートメントをグループにグループ化するのに役立つ機能であり、プログラミング言語で関数を作成するのと同じように何度も再利用できますが、構文が根本的に異なります。フランス。
Mục lục
MSSQLServerの機能の概念
ステートメントをグループ化して使用する場合、ストアドプロシージャを完全に使用でき、それでも実行できますが、最も明らかな違いは、関数に戻り値があり、ストアドプロシージャが実行されるだけで、と同じ値を返さないことです。機能。
関数はプログラムを単純化し、何度も使用できます。複雑なビジネスを行い、外部からパラメーター(パラメーター)を渡し、一連のSQLステートメントを連続して処理し、特定の値を返して接続を決定する必要があると想像してください。終了し、その戻り値をさらに作業に使用します。その場合、関数はこの問題の最も適切な解決策です。
SQLServerで一般的に使用される関数は次のとおりです。
決定論的および非決定論的関数(決定論的および非決定論的関数):
決定的な関数は、指定された入力値のセットで呼び出されるたびに同じクエリ結果を返し、データベースの同じ状態を指定します。未定義の関数は、アクセスされているデータベースが同じままであっても、指定された入力値を設定して呼び出されるたびに異なる結果を返します。
たとえば、ユーザーが特定の列でDAY()関数を呼び出すと、渡された日付データ型パラメーターの日数(int)が常に返されます。ただし、ユーザーがDATENAME()関数を呼び出すと、渡された日付の形式に基づいて実行ごとに異なる値が返されるため、出力を予測できません。したがって、関数DAY()は決定論的関数であり、DAYNAME()は未定義の関数です。
ユーザーは組み込み関数の決定論に影響を与えることはできません。各組み込み関数は、SQL Serverでの実装に基づいて、決定論的または未定義です。
決定論的関数と非決定論的関数のいくつか
決定論的組み込み関数 | 非決定論的組み込み関数 |
パワー | @@ TOTAL_WRITE |
円形 | CURRENT_TIMESTAMP |
ラジアン | GETDATE |
EXP | GETUTCDATE |
床 | GET_TRANSMISSION_STATUS |
四角 | NEWID |
SQRT | NEWSEQUENTIALID |
ログ | @@ CONNECTIONS |
年 | @@ CPU_BUSY |
ABS | @@ DBTS |
ASIN | @@ IDLE |
ACOS | @@ IOBUSY |
サイン | @@ PACK_RECEIVED |
正弦 | @@ PACK_SENT |
常に定義されていない関数がいくつかあります。明示的に指定されている場合は、インデックス付きビューで使用できます。
関数 | 説明 |
変換 | 次のいずれかの条件が存在する場合にのみ決定されます。 sql_variantソースタイプがあります。 未定義のsql_variantターゲットタイプまたはソースタイプがあります。 ソースとtartgetをsmalldatetimeまたはdateime、あるいは文字列のような別のソースタイプにします。パラメータスタイルは、定義された定数である必要があります。 |
キャスト | smalldatetime、sql_variant、datetimeを使用する場合にのみ指定します |
ISDATE | CONVERT関数と組み合わせて使用しない限り定義します。 |
チェックサム | CHECKSUM(*)を除いて決定します |
SQLServerでの関数定義
構文:
CREATE FUNCTION function_name (param_list) RETURN data_type AS BEGIN //statements RETURN value END
そこで:
function_name:関数名
param_list :関数に渡されるパラメーターのリスト
RETURN data_type:戻りデータ型を指定します
AS :関数の命令を記述するプロセスを開始する句
//ステートメント:SQLコマンドのリスト
RETURN値:戻り値。
例えば:
CREATE FUNCTION tinhphepcong(@x INT, @y INT) RETURNS INT AS BEGIN DECLARE @kq @kq = @x + @y RETURN @kq; END;
例2:
CREATE FUNCTION sales.udfuncNetSale( @quantity INT, @list_price DEC(10,2), @discount DEC(10,2) ) RETURNS DEC(10,2) AS BEGIN RETURN @quantity * @list_price * (1 - @discount); END;
この関数は、値下げされた後の製品の価格を計算します。
この関数の初期化を実行した後、[プログラマビリティ]>[関数]>[スカラー値関数]をクリックすると、SSMSに表示されます。
SQLServerで関数を呼び出す方法
SQL Serverで関数を呼び出せるように、functionname(param)構文を使用します
SELECT phepnhan (10, 20) as kequa
SELECT sales.udfuncNetSale(10,100,0.1) ketqua
SQLServerのALTER関数
ストアドプロシージャと同様に、関数を編集するには、次の構文を使用します。
ALTER FUNCTION [schema_name.]function_name (parameter_list) RETURN data_type AS BEGIN statements RETURN value END
関数の新しいコンテンツは、古いコンテンツを置き換えます。このコマンドは、自分で作成した関数でのみ編集でき、count、concatなどの組み込み関数は編集できません。
4.SQLServerのDROP関数
関数を削除するには、次の構造でDROPFUNCTIONコマンドを使用します。
DROP FUNCTION [schema_name.]function_name; // schema_name trong quá trình học thường là dbo
たとえば、上記で作成した関数を削除する場合は、次のコマンドを実行します。
DROP FUNCTION sales.udfNetSale;
同様に、自分で作成した関数のみを削除できます。
いくつかの注意:
- 各関数は、T-SQLステートメントのどこでも使用でき、データベーススコープ内にあります。
- 多くのパラメーターが存在する可能性がありますが、返されるのは1つの値のみであり、返される必要があります。 (プログラミングにおける関数の概念に似ています)
- 関数内では、任意のT-SQLステートメントを使用できます。
- この関数では、定義されている別の関数を呼び出すことができます。