0

複数のCASEステートメントを持つ単一のSELECTを使用して、ルックアップテーブルに含まれる値を複数の変数に割り当てようとしています。

このテーブルは、次のような2つの列を持つルックアップテーブルです。

[GreekAlphabetastic]

  SystemID    Descriptor
  --------    ----------
  1           Alpha
  2           Beta
  3           Epsilon

これは私の構文です:

SELECT 

    @VariableTheFirst = 
        CASE
            WHEN myField = 'Alpha' THEN tbl.SystemID
        END,

    @VariableTheSecond = 
        CASE
            WHEN myField = 'Beta' THEN tbl.SystemID
        END,

    @VariableTheThird = 
        CASE
            WHEN myField = 'Epsilon' THEN tbl.SystemID
        END

FROM GreekAlphabetastic tbl

ただし、このステートメントの実行後に変数を確認すると、それぞれに適切な値が割り当てられると期待していましたが、代わりに最後の変数にのみ値が割り当てられています。

SELECT 
    @VariableTheFirst AS First, 
    @VariableTheSecond AS Second, 
    @VariableTheThird AS Third

Results:

    First    Second    Third
    NULL     NULL      3

私は何が間違っているのですか?

4

3 に答える 3

3

SELECT からローカル変数に割り当てを行う場合、最後に処理された行のみが変数に影響します。3 行目では、CASE myField = 'Alpha'CASE myField = 'Beta'が false で、変数が NULL に設定されています。これCASE myField = 'Epsilon'は true で、@VariableTheThird には 3 が割り当てられます。

これを機能させたい場合は、次のようにします。

SELECT @VariableTheFirst = tbl.SystemID WHERE myField = 'Alpha'
SELECT @VariableTheSecond = tbl.SystemID WHERE myField = 'Beta'
SELECT @VariableTheThird = tbl.SystemID WHERE myField = 'Epsilon'
于 2010-03-26T16:38:44.003 に答える
2

最初の 2 つの変数は、割り当て後に null にリセットされています。つまり、イプシロン レコードにヒットすると、最初の 2 つの変数が null に割り当てられます。これは、CASE ステートメントでそれを防ぐものがないためです。

だから、これを試してください:

SELECT     
    @VariableTheFirst = 
        CASE
            WHEN Descriptor = 'Alpha' THEN tbl.SystemID
            ELSE @VariableTheFirst
        END,

    @VariableTheSecond = 
        CASE
            WHEN Descriptor = 'Beta' THEN tbl.SystemID
            ELSE @VariableTheSecond
        END,

    @VariableTheThird = 
        CASE
            WHEN Descriptor = 'Epsilon' THEN tbl.SystemID
            ELSE @VariableTheThird
        END
FROM GreekAlphabetastic tbl
于 2010-03-26T16:39:34.627 に答える
0
SELECT     
        CASE
            WHEN Descriptor = 'Alpha' THEN @VariableTheFirst = isnull(@VariableTheFirst,tbl.SystemID)
            WHEN Descriptor = 'Beta' THEN @VariableTheSecond = isnull(@VariableTheSecond,tbl.SystemID)
            WHEN Descriptor = 'Epsilon' THEN @VariableTheThird = isnull(@VariableTheThird,tbl.SystemID)
        END
FROM GreekAlphabetastic tbl
于 2010-03-26T16:48:57.247 に答える