前回の続き
今回からテーブル関数について紹介していきます。
テーブル関数とは
前回は単一の値を返す、スカラ関数について説明しましたが、今回紹介するテーブル関数はその名の通りテーブルを返す関数です。
なんかイメージしにくいですよね。
ひとまず、お付き合いください。 きっと出力をみたらイメージがわくはずです。
テーブル関数の作り方
テーブル関数はこんな風に作ります。
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)
こんな感じに出力されます。
その他
作ったテーブル関数の参照の仕方はスカラ変数と同じで、オブジェクトエクスプローラーから閲覧できます。
そのた、ALTERやDROPもスカラ関数と同じですので、説明は省略させていただきます!!
以上、今回はここまで。