こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

selectの行を共通に使いたい

ストアド・プロシジャーで

  入力引数 @INPUT_TYPE int

  if( @INPUT_TYPE = 1 ) begin
    select CLM1,CLM2,CLM3    
    from tableAAA
    where CLM1=100

  else if( @INPUT_TYPE = 2 ) begin
    select CLM1,CLM2,CLM3
    from tableAAA
    where CLM1=200
  end


と書くところを

  select CLM1,CLM2,CLM3
  from tableAAA

  if( @INPUT_TYPE = 1 ) begin
    where CLM1=100

  else if( @INPUT_TYPE = 2 ) begin
    where CLM1=200
  end

と書いてselectの行は共通処理としたいのですが、
当然上記のままでは登録時にエラーが発生します。

どなたか、方法をご存知でしたら教えてください。

投稿日時 - 2004-07-23 19:00:51

QNo.937102

暇なときに回答ください

質問者が選んだベストアンサー

  DECLARE @i int

としておいて、

  if( @INPUT_TYPE = 1 ) BEGIN
    @i=100
  END
  ELSE IF( @INPUT_TYPE = 2 ) BEGIN
    @i=200
  END

として、

  SELECT CLM1,CLM2,CLM3
  FROM tableAAA
  WHERE CLM1=@i

とすればよいのではないでしょうか。

投稿日時 - 2004-07-23 19:21:15

補足

早速の回答をしていただきまして、本当にありがとうございます。
なるほど、その通りです。
ただ、次のような場合にどうすればいいかわかりません。条件が以下の3種の場合です。

  入力引数 @INPUT_TYPE int

  if( @INPUT_TYPE = 1 ) begin
    select CLM1,CLM2,CLM3    
    from tableAAA
    /* 条件なし */
  end
  else if( @INPUT_TYPE = 2 ) begin
    select CLM1,CLM2,CLM3
    from tableAAA
    where CLM1 = 100
  end
  else if( @INPUT_TYPE = 3 ) begin
    select CLM1,CLM2,CLM3
    from tableAAA
    where CLM1 != 100
  end
これを1回のselectで実行する方法はあるでしょうか?
お力をお貸しください。よろしく御願いします。

投稿日時 - 2004-07-24 04:02:41

お礼

以下の様に対処して自己解決しました。

  入力引数 @INPUT_TYPE int

  select CLM1,CLM2,CLM3    
  from tableAAA
  where   
  (@INPUT_TYPE = 1)
  or
  (@INPUT_TYPE = 2 and CLM1 = 100)
  or
  (@INPUT_TYPE = 3 and CLM1 != 100)
ありがとうございました。

投稿日時 - 2004-07-26 09:44:18

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

解決したようで何よりです。

一応、今後のために動的SQLの作成方法をリンクしておきます。
sp_executesqlストアドプロシージャを使用します。

参考URL:http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_sp_ea-ez_2h7w.asp

投稿日時 - 2004-07-26 10:45:46

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-