システム開発 備忘録











SQLサーバー テーブル値関数

*** *** *** *** ***


テーブルにID列を作成する

テーブル値関数とは戻り値としてテーブルのようなものを返す関数
・使い方はACCSESSのクエリに近い。(SQL上でテーブルと同じように扱える)
・パラメータを上手く使うと、有効な使い方ができそう。

基本的な書き方

-- =============================================
-- テーブル値関数の作成
-- 社員マスタの指定した社員コードの社員を呼び出す関数
-- =============================================
CREATE FUNCTION [dbo].[TestFunction1] (@Cd char(7))
RETURNS TABLE
AS
RETURN
(
  SELECT 社員コード
  , 社員名漢字
  , 部門コード
  FROM dbo.社員マスタ
  WHERE dbo.社員マスタ.社員コード= @Cd
   and (削除フラグ!= '1')
);

-- =============================================
-- 関数の呼び出し
-- =============================================
/*社員コード'0000001'の社員の情報呼び出す*/
select * from TestFunction1('0000001')

*** *** *** *** ***
パラメータを省略可能とする書き方
テーブル値関数へのパラメータを省略可能にすれば、汎用的な関数がつくりやすくなる。

-- =============================================
-- テーブル値関数の作成
-- 社員マスタの指定した部門コード、雇用区分で抽出した結果を呼び出す関数
--部門コード、雇用区分は’’を指定すると指定無しとなる
-- =============================================
CREATE FUNCTION [dbo].[TestFunction2] (
   @Cd1 char(9),@Cd2 char(1))
RETURNS @T TABLE (
  [社員コード]char(7)
  , [社員名漢字]varchar(40)
  , [部門コード]char(9)
  , [雇用区分]char(1)
)
AS
begin

  INSERT @T
  SELECT 社員コード
  , 社員名漢字
  , 部門コード
  , 雇用区分
  FROM dbo.社員マスタ
  WHERE 削除フラグ!= '1'
  /*パラメータが''の場合以外は部門コードを抽出条件とする*/
  and (case @Cd1
   when '' then ''
   else 社員マスタ.部門コード
   end) = @Cd1
  /*パラメータが''の場合以外は雇用区分を抽出条件とする*/
  and (case @Cd2
   when '' then ''
   else 社員マスタ.雇用区分
   end) = @Cd2
return
end

-- =============================================
-- 関数の呼び出し
-- =============================================
/*部門コード'00002'、雇用区分'2'の社員のリストを呼び出す*/
select * from TestFunction2('00002','2')

/*部門コードを指定せずに雇用区分'2'の社員のリストを呼び出す*/
select * from TestFunction2('','2')




Copyright (C) 2009- station-t.com All Rights Reserved , Link Free