T-SQLプログラミング——ユーザーカスタム関数(スカラー関数)

6317 ワード

ユーザー定義関数
 
SQL serverを使用する場合は、内蔵されている関数のほか、必要に応じて自分で関数を定義することもできます.ユーザー定義関数の戻り値のタイプに応じて、ユーザー定義関数を3つのカテゴリに分類できます.
  • 戻り値が更新可能テーブルの関数
  • ユーザー定義関数に単一のselect文が含まれ、文が更新可能である場合、その関数が返すテーブルも更新可能であり、このような関数を埋め込みテーブル値関数と呼ぶ.
  • 戻り値更新不可テーブルの関数
  • ユーザー定義関数に複数のselect文が含まれている場合、その関数が返すテーブルは更新できません.このような関数をマルチステートメントテーブル値関数と呼ぶ.
  • スカラー値を返す関数
  • ユーザ定義関数の戻り値はスカラー値であり、このような関数をスカラー関数と呼ぶ.
     
    ここで説明する必要があるのは、ユーザ定義の関数は、ゼロまたは複数の入力パラメータを受け入れることができ、関数の戻り値は数値であってもよいし、テーブルであってもよい.ユーザー定義の関数は出力関数をサポートしません.
    alter functionを利用してユーザー定義関数を修正することができ、drop functionでユーザー定義関数を削除することができる(もちろん、グラフィックインタフェース操作で直接削除することもできるが、ここではあまり説明しない).
     
    スカラー関数の定義と呼び出し
    スカラー関数で定義される構文の形式は次のとおりです.
    1  create function [owner_name] function_name
    2  ([{@parameter_name [as] scalar_parameter_date_type [=default]}[,…n]])
    3  returns scalar_return_data_type [with encryption] [as]
    4  begin
    5      function_body
    6      return scalar_expression
    7  end

    その意味は以下の通りです.
  • owner_name:データベースのすべての名前.
  • function_name:ユーザーは関数名を定義します.関数名はラベル仕様に適合する必要があります.その所有者にとって、このユーザー名はデータベース内で一意である必要があります.
  • @parameter_name:ユーザー定義関数のパラメータ名.create function文では1つ以上のパラメータを明示し、@記号を最初の文字としてパラメータ名を指定し、各関数のパラメータがその関数に局所的に作用する.
  • scalar_parameter_data_type:パラメータのデータ型は、システムがサポートする基本スカラータイプであり、timestampタイプ、ユーザーにデータ型、cursor、tabelなどの非スカラータイプを定義することはできません.
  • default:デフォルト値を指定します.
  • with句は、encryptionパラメータが指定されている場合、作成された関数は暗号化され、関数定義のテキストはsyscommentsテーブルに読み取り不能に格納され、関数の作成者やシステム管理者を含む関数の定義は誰にも表示されません.
  • beginとendの間には、値を返すreturn文を含む関数問題が定義されています.関数はscalar_を返します.expression式の値.
  • scalar_return_data_type:ユーザー定義関数の戻りタイプ.SQL Serverでサポートされている基本スカラータイプであってもよいが、text、nterxt、image、timestampを除く.

  •  
    上記の説明に基づいて、統計を作成するために関数をカスタマイズしてもいいです.
    学院の学生の機械試験と筆記試験の平均成績を統計する.
    クエリーが容易なstunoフィールドを持つexamテーブルが既に存在するとします.
    筆記試験成績フィールドwrittenと機械試験フィールドlabもあり、すでに記録が存在する.
     1 create function getScore(@stuno varchar(20))
     2 returns  float as
     3 begin
     4     declare @Score float
     5     set @Score = -1;
     6     selecet @Score = (isnull(written,0)+isnull(lab,0))/2
     7     from exam
     8     where stuno = @stuno
     9     return @Score
    10 end

     
       
    スカラー関数の呼び出し:
    ユーザ定義関数を呼び出す場合は、少なくとも2つの部分からなるすべての名前(所有者.関数名)を指定する必要があります.ユーザー定義関数を呼び出す方法は2つあります.
    1.SELECT文で呼び出す——
      owner_name.function_name (@parameter_name1, 2 ……)
    パラメータは、ユーザ定義関数getScoreを呼び出すなど、付与されたローカル変数または式とすることができる.
    select dbo.getScore('123456789');

     
    2.EXEC文で実行
    T-SQLのexecute文でカスタム関数を呼び出す場合、実パラメータの識別順序は、関数定義のパラメータ識別順序とは異なり、その具体的な呼び出し形式は次のとおりです.
      owner_name.function_name @parameter_name1 , .... @parameter_name_n
    または
      owner_name.function_name @fparameter_name 1 = @aparameter_name1, .... @fparameter_name_n = @aparameter_name_n
    前者の実パラメータ順序は、関数定義のパラメータ順序と一致するべきであり、後者の実パラメータ順序は、関数定義のパラメータメッセージと一致しないことができる.
    関数のパラメータにデフォルト値がある場合は、関数を呼び出すときにdefaultキーを指定してデフォルト値を取得する必要があります.これは、ストレージ・プロシージャにデフォルト値があるパラメータとは異なり、ストレージ・プロシージャでパラメータを省略することはデフォルト値を使用することを意味します.
     
     
     
     
       
     
    転載先:https://www.cnblogs.com/viusuangio/p/6212072.html