テーブル値関数

[もどる]


インラインテーブル値関数

インラインテーブル値関数は1つの SELECT 文からなる。パラメータを受け取れるビューのようなものである。


サンプル1

CREATE FUNCTION dbo.GetTitlesByCreator
(	
	@creator nvarchar(20)
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT
		ID,
		TITLE,
		SERIES,
		[YEAR],
		TAG,
		[PATH]
	FROM
	  dbo.Manga
	WHERE
		CREATOR = @creator
)

サンプル2

CREATE FUNCTION dbo.GetLast100Manga
(	
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT TOP 100 * FROM dbo.Manga ORDER BY Id DESC
)

 

複数ステートメントのテーブル値関数

 次の関数は時刻表テーブル (TIMETABLE) と駅名マスターテーブル (STATIONS) から指定された駅の時刻表を取得する。

-- 特定の駅の時刻表を返す。
CREATE FUNCTION dbo.GetTrainDeparture 
(
	@station int
)
RETURNS 
 @result TABLE 
(
	id int,
	destination nvarchar(20),
	departure char(4)
)
AS
BEGIN
	DECLARE @cd int;
	DECLARE @dest nvarchar(20);
	DECLARE @dep char(4);

	DECLARE cur CURSOR FOR (
		SELECT
			T.ID AS ID, S.STATION AS 駅名, T.DEPARTURE AS 出発時刻
		FROM
			TIMETABLE AS T
			INNER JOIN STATIONS AS S
		ON
			T.DESTINATION = S.ID				
		WHERE
			T.STATION=@station);
	OPEN cur;
	FETCH NEXT FROM cur INTO @cd, @dest, @dep;
	WHILE @@FETCH_STATUS = 0
	BEGIN
		INSERT INTO @result VALUES(@cd, @dest, @dep);
		FETCH NEXT FROM Cur INTO @cd, @dest, @dep;
	END;
	CLOSE cur;
	DEALLOCATE cur;
	RETURN;
END