- - PR -
Transact-SQL でのCASE文の利用
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 と記述すればできたのですが、 値を返すのではなく、処理の分岐を行いのですが、できませんでしょうか? ご指導よろしくお願いいたします。 | ||||||||
|
投稿日時: 2008-03-07 11:38
まず、「CASE文」ではなく、「CASE式」です。最近は「CASE関数」というみたいですが。式や関数であるので、処理の分岐のようなことはできないでしょう。IF文などでやりくりするしかないのではないでしょうか。 Transact-SQL は何十年も前の言語なので、あまり複雑なことはできないです。どこかで割り切る必要があります。 | ||||||||
|
投稿日時: 2008-03-07 11:50
saki1208です。
>未記入さん なぜ、できなかったのでしょうか? どんなエラーが返ってきたのでしょうか? (もしくは、エラーにはならなかったが予定の動作とならなかったのでしょうか) もし、エラーとなったのならば、リファレンスを参照することで解決できませんか? | ||||||||
|
投稿日時: 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" を宣言してください。」 といったものでした。 宣言しているのに・・・? ご指導お願いいたします。 | ||||||||
|
投稿日時: 2008-03-07 14:08
saki1208です。
こちらは CASE文。 # 記述できない。
こちらは CASE式 ですよね。
また、CASE のリファレンスを参照すると、「任意の有効な式」を指定できる と記載されています。 SQLServer のリファレンスに「式」の定義についての記載もありますので、 そちらも参照されることをお勧めします。 | ||||||||
|
投稿日時: 2008-03-07 15:51
saki208様、ご回答ありがとうございます!
CASE文はダメ(というか、ない)のですね。 「式」について、確認しました。 式:記号と演算子の組み合わせ CASE:記号でも演算子でもないので、式としては使えない と読み取りました(あってますか?) 「文」と「式」、あいまいに考えていましたが、 これを機にしっかり頭に入れたいと思います。 ありがとうございました! ※質問とは関係ないのですが、 saki1208様が記述されたように、 この掲示板の書き込みの際、コードを見やすく入力するにはどのようにするのでしょうか? 入力時、空白を入れて段差をつけたのですが、 空白がつめられて登録されたようで・・・ こちらもお教えいただければうれしいです! | ||||||||
|
投稿日時: 2008-03-07 16:11
saki1208です。
解釈が誤っているようですが... もう一度 CASE のリファレンスを熟読したほうが良いようです。 CODEタグ([code][/code])で括ればよいです。 その他のタグについては FAQ を参照してください。 [ メッセージ編集済み 編集者: saki1208 編集日時 2008-03-07 16:12 ] | ||||||||
|
投稿日時: 2008-03-12 12:43
saki1208様、ご回答ありがとうございました。
御礼が遅くなり、申し訳ありません。 >もう一度 CASE のリファレンスを熟読したほうが良いようです。 はい、もっと熟読します! CODEタグの件も、ありがとうございました! 今後もよろしくお願いします。 本当にありがとうございました!! |
1