MSDE FunClub 現在までのアクセスカウント数 最終更新日 : 2000/08/08
Microsoft Data Engine FunClub
Since 2000.08.08
SQLServer7.0/MSDE 完全トレーニングテキスト(上巻)
【第3章250p 〜 252p掲載】

-- [SQL03_12.SQL]
--             SQLServer7.0  Transact-SQL言語
--             日本技術ソフト開発  堀川 明
--            http://www.horikawa.ne.jp/msde/
--
-- このSQLプログラムは、CASE関数の例題です
-- 但しこのような動的SELECT文は、絶対に作らないでください
--
-- 1つだけ注意があります。THEN によって代入されるデータ型が異なる時は
-- (特に列の定義)、すべてを同じ型に統一してください


-- これから操作する既定のデータベースを MySampleTest にします
    USE MySampleTest
GO

-- [社員]テーブルの存在チェック
    IF( ( object_id('社員') IS NULL ) OR 
                OBJECTPROPERTY( object_id('社員') , 'IsTable' ) = 0 )
       BEGIN
            PRINT '****Error!!****'
            PRINT 'AccessのNorthwindデータベースの[社員]テーブルを使います'
            PRINT '[社員]テーブルを転送してください'
            RAISERROR( '[社員]テーブルが見つかりません',16,127)
            RETURN
       END
GO

--/////////////////////////
--     CASE関数の例題
--/////////////////////////
   
   DECLARE @DAT INT

    -- 1 OR 2 OR 3 OR 4 を代入してください
    SELECT @DAT = 4


   -- [社員コード]は整数型なのでCASTが無いと、このCASE関数は整数型と見なされます
   -- この時 @DAT=2で[フリガナ] を選択したら実行時エラーが発生します
   -- 【構文エラー。VARCHAR 値 'フリガナ' から INT データ型に変換できませんでした】
   SELECT TOP 3  (CASE @DAT
                WHEN 1 THEN CAST([社員コード] AS varchar) 
                WHEN 2 THEN [フリガナ] 
                WHEN 3 THEN [氏名]
                ELSE   [在籍支社]
           END  ) 
    FROM 社員

 
   -- ******************************************************************************
   --                     検索CASE関数を使った応用(?)例
   -- これは文法上、CASEを使うとこんなプログラムも許されるという悪い(?)見本です
   -- 実際は、SQL文を文字列で作成し、EXECUTEで動的に実行します
   -- この例は、CASEの使い方のヒントとして作ったものです(真似厳禁!!)
   -- *******************************************************************************
   SELECT  [社員コード] ,

           (CASE
              WHEN @DAT>=2 THEN [フリガナ]
              ELSE ''                        -- これを入れるのがポイント!!
            END ) AS フリガナ ,

           (CASE
              WHEN @DAT>=3 THEN [氏名]
              ELSE ''
            END ) AS 氏名 , 

           (CASE
              WHEN @DAT>=4 THEN [在籍支社]
              ELSE ''
            END ) AS 在籍支社 

   FROM 社員
   WHERE
      -- @DAT>=1の条件
          ( [社員コード] >= 100 )

      -- @DAT>=2の条件
          AND
          (
            (CASE
              WHEN @DAT>=2 THEN ( [フリガナ] )
              ELSE 'DUMMY'                 -- これを入れるのがポイント!!
              END ) LIKE (CASE
                         WHEN @DAT>=2 THEN '[タ-ノ]%'    --【注】実際は半角のカナ文字を使用 
                         ELSE 'DUMMY'
                         END )
          )

      -- @DAT>=3の条件
          AND
          (
            (CASE
              WHEN @DAT>=3 THEN ( [氏名] )
              ELSE 'DUMMY'
              END ) = (CASE
                         WHEN @DAT>=3 THEN '田中 和明' 
                         ELSE 'DUMMY'
                         END )
             OR
            (CASE
              WHEN @DAT>=3 THEN ( [氏名] )
              ELSE 'DUMMY'
              END ) = (CASE
                         WHEN @DAT>=3 THEN '新田 哲也' 
                         ELSE 'DUMMY'
                         END )

          )

      -- @DAT>=4の条件
          AND
          (
           (CASE
              WHEN @DAT>=4 THEN ( [在籍支社] )
              ELSE 'DUMMY'
              END ) = (CASE
                         WHEN @DAT>=4 THEN '大阪支社' 
                         ELSE 'DUMMY'
                         END )
          )
GO




技術評論社の書籍ガイドへ
上巻:ISBN4-7741-0965-7

ウィンドウを閉じる


(株)日本技術ソフト開発 責任編集:堀川 明
MSDE FunClubに関するご意見・ご要望等ございましたら、 msdefun@horikawa.ne.jp までご連絡下さい。
HOME: http://www.horikawa.ne.jp/msde/


MSDE FunClubの運営は、マイクロソフト社とは一切の関係はありません