MSDE FunClub | 最終更新日 : 2000/08/08 | |
Microsoft Data Engine FunClub |
|
|
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