2016-07-05 15 views
0

私は、Access DBのVBAで作成したプロジェクトをSQL Server 2008 R2のVB.Netに移行するように要求されました。私は関数 'IIF'がこのようなSQL Serverのバージョンでは組み込み関数として提供されていないことを他のスレッドでも読んでいますが、 '='演算子を使用してブール値を表現することはできないため、 CASEを使った問題は、いくつかのIIFの内部で評価するために複数の式があるということです。短い言葉で組み込み関数IIF

は、これはエラーを生成し、

Iif(Value1 = Value2, 'Some return', 'Another return') 

「を=演算子が定義されていません」と、次のようなIIF式はCASE式に変換することができません。

Iif((Value1 = Value2) And (Value3 = Value4), 'Value to return if true', 'Value to return if false') 

私は現在、ストアドプロシージャを作成して、この問題を克服するために、プログラミングの構造を利用してますが、ネストされたIIFのがたくさんあるので、それは非効率的な回避策ですよ。

私の質問は、それを行うより効率的な方法はありますか?または私はストアドプロシージャでそれを行う必要がありますか?

ありがとうございます。

+4

のように書き換えることができます。 'Iif((Value1 = Value2)And(Value3 = Value4)、 'ValueがTrueなら返す値'、 'falseなら返す値')'は、Value1 = Value2の場合と等しくなり、Value3 = Value4なら '返す値もしtrueなら 'else' falseならば返す値 'end' –

答えて

1

あなたIIF通話の両方がCASE表現に変換することができます。

IIF(Value1 = Value2, 'Some return', 'Another return') 
IIF((Value1 = Value2) AND (Value3 = Value4), 'Value to return if true', 'Value to return if false') 

はすべてIIFはCASEに変換することができ

CASE WHEN Value1 = Value2 THEN 'Some return' ELSE 'Another return' END 

CASE WHEN (Value1 = Value2) AND (Value3 = Value4) 
    THEN 'Value to return if true' 
    ELSE 'Value to return if false' 
END 
+0

ああ、そうだよ、どうしてそれがうまくいかなかったのか分からない、ありがとう。この回答は5分後には正しいと私は受け入れるだろう。なぜならこのページは今私がそれをやることを許さないからだ。 – Azura

+0

私はそれがうまくいかなかった理由を理解しています。ブール式がWHEN句にあり、CASEが空であることに注意することが重要だと思います。ケースが間違っているそれが私の最初の試みではうまくいかなかった理由です。もう一度おねがいします。誰かが似たような推論を後で実行した場合、このコメントを残します。 – Azura

関連する問題