- - PR -
動的SQL文
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-01-15 11:59
こんにちは。
前回はありがとうございました。 もう1点、動的SQL文をお聞きします。 DECLARE @SYO AS char(1) SET @SYO = 'B' SELECT CASE WHEN @SYO = 'A' THEN 'OK' ELSE 'NO' END を動的SQL文に変えたいので DECLARE @SYO AS char(1) SET @SYO = 'B' EXEC(' SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END') としました。 列名 'B' が無効です となってしまいます。このような場合は どのようにするのでしょうか? 宜しくお願いします。 |
|
投稿日時: 2009-01-15 12:17
ORACLE ですか?
FROM 句が無いですが。 |
|
投稿日時: 2009-01-15 12:35
シングルコーテーションが足りないだけでしょうが、
いずれにせよDBMS名やバージョンは明記して下さい。 |
|
投稿日時: 2009-01-15 13:02
EXEC(' SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END')
を PRINT(' SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END') とすれば、何が間違っているのかすぐにわかるはず。 |
|
投稿日時: 2009-01-15 13:19
申し訳ありません。
SQLServer2005です。 早速、よっしーさんのを実行してみました。 結果は SELECT CASE WHEN B = 'A' THEN 'OK' ELSE 'NO' END です。 EXEC(' SELECT CASE WHEN @SYO = ''A'' THEN ''OK'' ELSE ''NO'' END') と変更してみましたが スカラ変数 "@SYO" を宣言してください。 のエラーになってしまいます。 EXEC(' DECLARE @SYO AS char(1) SET @SYO = ''B'' SELECT CASE WHEN @SYO = ''A'' THEN ''OK'' ELSE ''NO'' END') ではOKですが。 どうしても変数は外にしたいのです。 すいません、どのように書くのでしょうか? 宜しくお願いします。 |
|
投稿日時: 2009-01-15 13:28
どういう SQL を作成したいかという方向から考えていけばどうですか?
作りたい SQL は SELECT CASE WHEN B = 'A' THEN 'OK' ELSE 'NO' END じゃないですよね? |
|
投稿日時: 2009-01-15 13:32
Kingさん、ありがとうございます。
作りたいSQL文は SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END' です。 |
|
投稿日時: 2009-01-15 13:43
Kingさんがおっしゃっているのは
「結果的にどういうSQL文になってほしいか」。 ということだと思います。 ' SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END' は、@SYOにBがSETされているとき、結果的に SELECT CASE WHEN B = 'A' THEN 'OK' ELSE 'NO' END というSQL文になります。(PRINTで確認したように) なびさんとしては、本当はどのようなSQL文になってほしかったですか? |
1|2|3
次のページへ»