- PR -

Transact-SQL でのCASE文の利用

1
投稿者投稿内容
あきこ
会議室デビュー日: 2008/03/07
投稿数: 12
投稿日時: 2008-03-07 11:24
いつも参考にさせていただいていました。
ありがとうございます。

CASE文を使って、処理の分岐はできないのでしょうか?

set @aaa = null
case
when @aaa is null then
set @bbb = 9
else
set @bbb = 1
end

といったことをしたいのですが、できませんでした。

set @aaa = null
set @bbb = case
when @aaa is null then
9
else
1
end
と記述すればできたのですが、
値を返すのではなく、処理の分岐を行いのですが、できませんでしょうか?

ご指導よろしくお願いいたします。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-03-07 11:38
引用:

未記入さんの書き込み (2008-03-07 11:24) より:
CASE文を使って、処理の分岐はできないのでしょうか?


まず、「CASE文」ではなく、「CASE式」です。最近は「CASE関数」というみたいですが。式や関数であるので、処理の分岐のようなことはできないでしょう。IF文などでやりくりするしかないのではないでしょうか。

Transact-SQL は何十年も前の言語なので、あまり複雑なことはできないです。どこかで割り切る必要があります。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2008-03-07 11:50
saki1208です。

>未記入さん
なぜ、できなかったのでしょうか?
どんなエラーが返ってきたのでしょうか?
(もしくは、エラーにはならなかったが予定の動作とならなかったのでしょうか)

もし、エラーとなったのならば、リファレンスを参照することで解決できませんか?
あきこ
会議室デビュー日: 2008/03/07
投稿数: 12
投稿日時: 2008-03-07 12:53
unibon様、saki1208様、ご回答ありがとうございます!

「CASE文」、「CASE式」と、違う意味だったんですね。
確かに、
−−−−−−−−−
set @bbb = case
when @aaa is null then
9
else
1
end
−−−
という使い方は、関数の使い方だな、とは思ったのですが。
すみませんでした。
今後気をつけます。


−−−−−−−−−−−−
DECLARE @aaa INT
DECLARE @bbb INT
case
when @aaa is null then
set @bbb = 9
else
set @bbb = 1
end
−−−
としたときのエラーですが、
3行目で「キーワード 'case' 付近に不適切な構文があります。」
となりました。
といっても、3行目はcaseしか記述していないので何がおかしいのか?と思い、
BooksOnlineでcaseを調べたところ、
thenの直後で処理を行っているサンプル記述がなかったため、
値を返すことしかできないのかな?と思い、
−−−−−−−−−
set @bbb = case
when @aaa is null then
9
else
1
end
−−−
という形にしてみたところ、正常に処理されたので、疑問が沸いてきたところでした。

また、エラーは、5行目に対しても出てしまい、内容は
「スカラ変数 "@bbb" を宣言してください。」
といったものでした。
宣言しているのに・・・?

ご指導お願いいたします。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2008-03-07 14:08
saki1208です。

こちらは CASE文。 # 記述できない。
コード:
set @aaa = null 
case 
    when @aaa is null then 
        set @bbb = 9 
    else 
        set @bbb = 1 
end 



こちらは CASE式 ですよね。
コード:
set @aaa = null 
set @bbb = case 
               when @aaa is null then 
                   9 
               else 
                   1 
           end 



また、CASE のリファレンスを参照すると、「任意の有効な式」を指定できる
と記載されています。

SQLServer のリファレンスに「式」の定義についての記載もありますので、
そちらも参照されることをお勧めします。
あきこ
会議室デビュー日: 2008/03/07
投稿数: 12
投稿日時: 2008-03-07 15:51
saki208様、ご回答ありがとうございます!

CASE文はダメ(というか、ない)のですね。

「式」について、確認しました。
式:記号と演算子の組み合わせ
CASE:記号でも演算子でもないので、式としては使えない

と読み取りました(あってますか?)

「文」と「式」、あいまいに考えていましたが、
これを機にしっかり頭に入れたいと思います。

ありがとうございました!

※質問とは関係ないのですが、
saki1208様が記述されたように、
この掲示板の書き込みの際、コードを見やすく入力するにはどのようにするのでしょうか?
入力時、空白を入れて段差をつけたのですが、
空白がつめられて登録されたようで・・・
こちらもお教えいただければうれしいです!

saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2008-03-07 16:11
saki1208です。

解釈が誤っているようですが...
もう一度 CASE のリファレンスを熟読したほうが良いようです。

CODEタグ([code][/code])で括ればよいです。
その他のタグについては FAQ を参照してください。


[ メッセージ編集済み 編集者: saki1208 編集日時 2008-03-07 16:12 ]
あきこ
会議室デビュー日: 2008/03/07
投稿数: 12
投稿日時: 2008-03-12 12:43
saki1208様、ご回答ありがとうございました。
御礼が遅くなり、申し訳ありません。

>もう一度 CASE のリファレンスを熟読したほうが良いようです。
はい、もっと熟読します!

CODEタグの件も、ありがとうございました!

今後もよろしくお願いします。
本当にありがとうございました!!
1

スキルアップ/キャリアアップ(JOB@IT)