プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】テーブル関数 -29-

www.pon-x.jp

前回の続き

今回からテーブル関数について紹介していきます。

テーブル関数とは

前回は単一の値を返す、スカラ関数について説明しましたが、今回紹介するテーブル関数はその名の通りテーブルを返す関数です。
なんかイメージしにくいですよね。
ひとまず、お付き合いください。 きっと出力をみたらイメージがわくはずです。

テーブル関数の作り方

テーブル関数はこんな風に作ります。

CREATE FUNCTION [関数名] (
    [ @引数名 ] [データ型],
    ・・・
)  
RETURNS [ @戻値となるテーブル名] TABLE (
    [カラム名] [データ型] [NULL or NOT NULL],
    ・・・
)
AS
BEGIN

    --##############################--
    -- 戻値となるテーブルに値をINSERTする
    --##############################--

    RETURN

END

こんな感じに定義できます。

実際に作ってみよう。

いよいよ実際に作ってみます。
今回は引数を2つつけて累乗の計算をするテーブルを返す関数を作ってみます。



CREATE FUNCTION TEST_FUN (
    @NUM INT,
    @POW INT
)  
RETURNS @TEST_TABLE TABLE(
    NUM BIGINT,
    TXT NVARCHAR(10)
)
AS
BEGIN

    DECLARE @CNT INT

    SET @CNT = 1

    WHILE @CNT <= @POW
        BEGIN
            INSERT INTO @TEST_TABLE
            VALUES(
                POWER(@NUM, @CNT),
                CONVERT(VARCHAR,@NUM) + '^' + CONVERT(VARCHAR,@CNT)
            )

            SET @CNT += 1
        END

    RETURN

END

こんな感じです。

簡単に説明しますね。
@NUMの累乗を求めるのですが、1乗から@POW乗までを計算するというものです。
WHILE文は@CNTが1から@POWまで繰り返すのですが、計算した結果をINSERT文でテーブルに入れてあげるのを繰り返すといったことをしてあげています。

では実行してみましょう。

SELECT * FROM TEST_FUN(2, 30)

こんな感じに出力されます。
f:id:hanabusa-snow:20201212213458p:plain

その他

作ったテーブル関数の参照の仕方はスカラ変数と同じで、オブジェクトエクスプローラーから閲覧できます。
f:id:hanabusa-snow:20201212222142p:plain

そのた、ALTERやDROPもスカラ関数と同じですので、説明は省略させていただきます!!





以上、今回はここまで。