2009-03-14 16 views
20

SQL 2005を使用してsql From句でCase文を使用することはできますか?限り....sql From句でCase文を使用することは可能ですか?

をあなたが逆行しているものをSQLバックエンドを指定していないので

SELECT Md5 FROM 
CASE 
    WHEN @ClientType = 'Employee' THEN @Source = 'HR' 
    WHEN @ClientType = 'Member' THEN @Source = 'Other' 
END CASE 
WHERE Current = 2; 

答えて

6

想定SQL Server:

動的SQLを使用する必要があります。文字列を作成し、文字列でsp_executesqlを呼び出します。

編集:適切な文を実行し、その値を変数に割り当てるためにif文を使用するだけです。可能であれば、動的SQLは避けてください。

0

すると、これは適切に答えることは難しいでしょう。たとえば、私のような何かをしようとしています私は、あなたはMS SQL Serverに対しても、Interbase/Firebirdに対してもこれを行うことはできないと伝えることができます。私はそれが答えは方法はありませんと言ってかなり安全だと思うけれども...

マルク・

0

、他のバックエンドサーバのために話すことはできません。それはSQLの方言にかかわらずです。

22

私はそうは考えていません。 1つは、問合せオプティマイザはFROM句内の表のようなものの特定のリストを想定しています。 @ClientType述語与え、

SELECT md5 
FROM hr 
WHERE @clienttype = 'Employee' 
AND  current = 2 
UNION 
SELECT md5 
FROM other 
WHERE @clienttype = 'Member' 
AND  current = 2; 

のみUNIONの半分は本当かもしれない:私は考えることができる

最も簡単な回避策は2つのテーブル間UNIONだろう。

+0

文の場合、私は通常の書き込みだろうが、と組み合わせて、この戦略を使用するときに持っていることから、それは私が保存されます「挿入」:

これはあなただけで一つの値を探しているなら、それを行う必要があります可能であれば、この方法でこれをやっていきます。 :) –

+0

テーブルの各行に対して 'WHERE'条件が実行されることに注意してください。したがって、条件が少し複雑で数百万行がある場合は、オプションではない可能性があります。 –

1

いいえ、CASE文を使用してクエリするテーブルを選択することはできません。 CASEステートメントは、列の値やWHERE式の一部など、式内でのみ実行されます。

IF @ClientType = 'Employee' BEGIN 
    SET @Source = (SELECT Md5 FROM HR WHERE Current = 2) 
END 
ELSE IF @ClientType = 'Member' BEGIN 
    SET @Source = (SELECT Md5 FROM Other WHERE Current = 2) 
END 
+0

これは「長い間手渡されている」ので、これは私が取る方法です(しかし、投票は残っていません: - /)。私はむしろ、SQLを静的に生成するツールを使用しています(これは、Rubyの3行、またはPerlの1行ですか?:-)対動的SQLの処理(動的SQLを_必要とするとき、動的SQLが必要です)。 –

関連する問題