2

SELECT条件に基づいてアイテムを表示するステートメントを SQL Server で記述しようとしています。条件は、後続のWHERE句で指定します。

これは、私が書こうとしているものの簡略化されたバージョンです。

DECLARE @tmpvar varchar(5)
....

SELECT @tmpvar,
....
FROM some_table
WHERE 
....
and @tmpvar =
      CASE WHEN (some condition here)
             THEN 'YES'
             ELSE 'NO'
      END

上記のコードは正常に実行されますが、 の値を確認すると@tmpvar、未割り当てのままです。

使用している構文に誤りがあるかどうかを知りたいです。SELECTもしそうなら、与えられた条件を使用してステートメント内で変数を割り当てる正しい方法は何でしょうか? この質問が冗長である場合は、事前にお詫び申し上げます。

4

1 に答える 1

1

WHERE句で割り当てることはできません。SELECT句で次のことができます。

DECLARE @tmpvar varchar(5)
....

SELECT @tmpvar =
      CASE WHEN (some condition here)
             THEN 'YES'
             ELSE 'NO'
      END,
....
FROM some_table
WHERE 
....

ただし、同時にデータの取得を試みていない場合に限ります。また、ORDER BY句がない限り、結果セットに複数の行がある場合、どの行が結果に影響を与えるかはかなり不十分に定義されています。

SELECT ステートメントが複数の値を返す場合、変数には最後に返された値が割り当てられます。


お気づきかもしれませんが、SQL は=代入、比較、エイリアスの導入に使用します。=の出現位置でどちらが決まるか。WHERE節で=は比較のみ可能。

于 2013-07-25T12:21:51.383 に答える