- - PR -
動的SQL文
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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文にしたいのです。 | ||||
|
投稿日時: 2009-01-15 14:01
デューンさんのおっしゃっている通りの事が知りたいです。
そもそも
で生成され、実際に実行される SQL が何かもわかりませんか? | ||||
|
投稿日時: 2009-01-15 14:11
何度もすいません。
@SYOの値で判断させたいのです。 EXEC(' SELECT CASE WHEN ' + '''' + @SYO + '''' + ' = ''A'' THEN ''OK'' ELSE ''NO'' END') としてもだめです。 | ||||
|
投稿日時: 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が文字として扱われたのか、列として扱われたのか、よく考えてみてください。
をやりたいのですよね? [ メッセージ編集済み 編集者: セラフ 編集日時 2009-01-15 14:22 ] | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2009-01-15 14:30
よくわからないけど、昔はできていたんじゃないの?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45063&forum=26 | ||||
|
投稿日時: 2009-01-15 14:32
ありがとうございます。
DECLARE @SYO AS char(1) SET @SYO = 'B' EXEC(' SELECT CASE WHEN ''' + @SYO + ''' = ''A'' THEN ''OK'' ELSE ''NO'' END') で解決しました。 以前投稿したことは忘れていました。すいません。 | ||||
|
投稿日時: 2009-01-15 14:44
考える事無く解決したのでまた同じ質問が出るような気がします。
ていうか出てますし。 「なぜか」を考えておくと同じ所で躓く事は無いと思いますよ。 |