- PR -

動的SQL文

投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2009-01-15 13:46
すいません。

DECLARE @SYO AS char(1)
SET @SYO = 'B'
SELECT CASE WHEN @SYO = 'A' THEN 'OK' ELSE 'NO' END

で結果は'NO'です。
SET @SYO = 'A'とすれば結果は'OK'です。

これをSELECTの部分を動的SQL文にしたいのです。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-15 14:01
デューンさんのおっしゃっている通りの事が知りたいです。

そもそも

引用:
DECLARE @SYO AS char(1)
SET @SYO = 'B'
SELECT CASE WHEN @SYO = 'A' THEN 'OK' ELSE 'NO' END



で生成され、実際に実行される SQL が何かもわかりませんか?
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2009-01-15 14:11
何度もすいません。

@SYOの値で判断させたいのです。

EXEC(' SELECT CASE WHEN ' + '''' + @SYO + '''' + ' = ''A'' THEN ''OK'' ELSE ''NO'' END')
としてもだめです。

セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-01-15 14:15
みんなイジワル・・・

1)SELECT CASE WHEN B = 'A' THEN 'OK' ELSE 'NO' END
2)SELECT CASE WHEN 'B' = 'A' THEN 'OK' ELSE 'NO' END

の違いわかりますか?

PRINT(' SELECT CASE WHEN ' + @SYO + ' = ''A'' THEN ''OK'' ELSE ''NO'' END')

で出力されたのは、1)ですよね。

Bが文字として扱われたのか、列として扱われたのか、よく考えてみてください。

コード:

DECLARE @SYO AS char(1)
SET @SYO = 'B'
EXEC(' SELECT CASE WHEN ''' + @SYO + ''' = ''A'' THEN ''OK'' ELSE ''NO'' END')
↑ ↑
 「ここのシングルコーテーションが足りない」


をやりたいのですよね?

[ メッセージ編集済み 編集者: セラフ 編集日時 2009-01-15 14:22 ]
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-01-15 14:18
DECLARE @SYO AS char(1)
SET @SYO = 'B'
EXEC(' SELECT CASE WHEN ' + '''' + @SYO + '''' + ' = ''A'' THEN ''OK'' ELSE ''NO'' END')

は、私の環境(SQLServer 2000 + クエリアナライザ)では(@SYOがAでもBでも)上手くいくのですが、
エラーが出るのですか?
別のやり方がほしいということですか?


ちなみに、
EXEC(' SELECT CASE WHEN ''' + @SYO + ''' = ''A'' THEN ''OK'' ELSE ''NO'' END')
と書いても同じことになります。


[ メッセージ編集済み 編集者: デューン 編集日時 2009-01-15 14:19 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2009-01-15 14:30
よくわからないけど、昔はできていたんじゃないの?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45063&forum=26
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2009-01-15 14:32
ありがとうございます。

DECLARE @SYO AS char(1)
SET @SYO = 'B'
EXEC(' SELECT CASE WHEN ''' + @SYO + ''' = ''A'' THEN ''OK'' ELSE ''NO'' END')
で解決しました。

以前投稿したことは忘れていました。すいません。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-01-15 14:44
考える事無く解決したのでまた同じ質問が出るような気がします。
ていうか出てますし。
「なぜか」を考えておくと同じ所で躓く事は無いと思いますよ。

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