SELECT
ステートメントは、おそらくSQLServerで最も一般的に使用されるステートメントです。ほとんどの場合、このステートメントはビューに対して実行されるか、テーブルに対して直接実行されて、表形式のデータの行を取得します。
ただし、SELECT
を実行できるオブジェクトはビューとテーブルだけではありません。 上の声明。 SELECT
ステートメントは、行セット関数、OPENXML、ユーザー定義関数などの他のオブジェクトでも使用できます。
この記事では、テーブル値関数を使用してデータを選択する例を示します。
例1-基本機能
これは、インラインのテーブル値関数を介してテーブルから基本データを選択するクイック関数です。
SELECT * FROM udf_Cats_ITVF();
結果:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 1 | Garfield | 9871237654 | | 2 | Felix | 8871237651 | | 3 | Tom | 7871237652 | | 4 | Fetch | 6871237653 | +---------+-----------+------------+
関数は次のようになります:
CREATE FUNCTION dbo.udf_Cats_ITVF() RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats ); GO
この関数は、テーブルからすべての行を選択するだけです。引数は必要ありません。
特定の猫を選択したい場合は、WHERE
を追加する必要があります 条項。
SELECT * FROM udf_Cats_ITVF() WHERE CatName = 'Fetch';
結果:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
ここで認めなければならないのは、テーブルから直接データを選択することもできたので、この関数は一種の不要なものです。または、その仕事をするためのビューを作成することもできます。ただし、ユーザー定義関数には、テーブルとビューにはない利点があります。パラメーターです。
例2–パラメーターを使用した関数
テーブル値関数の利点の1つは、パラメーターをサポートすることです。これは、関数がもう少し便利になるところです。テーブル値関数は、ビューと同じように動作しますが、パラメーターを許可する機能が追加されているため、「パラメーター化されたビュー」と呼ばれるものもあります。
したがって、猫の名前の引数を受け入れるために、前の関数のバリエーションを作成できます。
SELECT * FROM udf_CatsByName_ITVF('Fetch');
結果:
+---------+-----------+------------+ | CatId | CatName | Phone | |---------+-----------+------------| | 4 | Fetch | 6871237653 | +---------+-----------+------------+
新しい関数は次のようになります:
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) RETURNS TABLE AS RETURN ( SELECT CatId, CatName, Phone FROM dbo.Cats WHERE CatName = @CatName ); GO
例3–結合
テーブル値関数を結合に含めることができます。
ここでは、特定のアーティストのすべてのアルバムを返すテーブル値関数からすべての列を選択します。
SELECT * FROM ufn_AlbumsByArtist(1);
結果:
+------------+-------------------------+---------+ | ArtistId | AlbumName | Genre | |------------+-------------------------+---------| | 1 | Powerslave | Rock | | 1 | Somewhere in Time | Rock | | 1 | Piece of Mind | Rock | | 1 | Killers | Rock | | 1 | No Prayer for the Dying | Rock | +------------+-------------------------+---------+
この関数の唯一の問題は、アーティスト名が返されないことです。アーティスト名が必要な場合は、そのデータを含むテーブルと結合する必要があります。この場合、アーティスト名を含むテーブルはArtists
と呼ばれます。 、次のようにクエリを変更できます:
SELECT ar.ArtistName, aba.AlbumName, aba.Genre FROM ufn_AlbumsByArtist(1) aba INNER JOIN Artists ar ON aba.ArtistId = ar.ArtistId;
結果:
+--------------+-------------------------+---------+ | ArtistName | AlbumName | Genre | |--------------+-------------------------+---------| | Iron Maiden | Powerslave | Rock | | Iron Maiden | Somewhere in Time | Rock | | Iron Maiden | Piece of Mind | Rock | | Iron Maiden | Killers | Rock | | Iron Maiden | No Prayer for the Dying | Rock | +--------------+-------------------------+---------+