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 | +--------------+-------------------------+---------+