| 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