ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

SQL Serverのユーザー定義関数を使おう~(8)生徒情報を取得するユーザー定義関数を作る

leave a comment »

システムを作っていくと、多くの場所で同じ処理をすることに気づく。例えば生徒の基本情報を記録する「生徒」テーブルには、生徒の氏名を「姓」と「名」のフィールドで記録している。しかし帳票では「姓+名」で表示をしたいので、至る所で「姓+’ ’+名」のような処理をすることになる。このような似たような処理はユーザー定義関数を作っておくとよい。

ここでは生徒基本情報である「生徒」テーブルから、学籍番号をキーにして生徒の情報を関数で取り出すものを作ってみた。

使い方はこうだ。生徒の姓名が欲しいときには「select dbo.fx生徒(‘1234567′,’姓名’)」のようにする。最初の引数が学籍番号で、次の引数はパラメータだ。性別を知りたいときは「select dbo.fx生徒(‘1234567′,’性別’)」のようにする。関数の作りは簡単で、パラメータによってif文で条件分岐しているだけである。

この関数はパラメーターを増やすと改正可能である。増やす分には既に作ったクエリやストアドプロシージャに影響を与えない。

————————————————————————————————

create function [dbo].[fx生徒]
              (
              @p_学籍番号 char(7),
              @p_種類 varchar(50)
              )
returns varchar(50)
as
begin
              if @p_種類= ‘姓名’
              begin
                            return (SELECT 生徒姓+ ‘ ’ + 生徒名 FROM dbo.生徒 where 学籍番号 = @p_学籍番号)
              end
              if @p_種類= ‘姓’
              begin
                            return (SELECT 生徒姓 FROM dbo.生徒 where 学籍番号= @p_学籍番号)
              end
              if @p_種類= ‘名’
              begin
                            return (SELECT 生徒名 FROM dbo.生徒 where 学籍番号= @p_学籍番号)
              end
              if @p_種類= ‘性別’
              begin
                            return (SELECT dbo.kbn_性別.区分名 FROM dbo.生徒                                                        INNER JOIN dbo.kbn_性別 ON dbo.生徒.性別 = dbo.kbn_性別.区分コード                                                        where dbo.生徒.学籍番号 = @p_学籍番号)
              end
              if @p_種類= ‘性別コード’
              begin
                            return (SELECT 性別 FROM dbo.生徒 where 学籍番号= @p_学籍番号)
              end
return null
end

Written by Yoshio Matsumoto

2010年6月14日 @ 11:41 PM

カテゴリー: SQL Server

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。