1

私はここにクエリを持っていますが、このクエリを書くためのより短い方法があるかどうか興味があります。つまり、クエリがIF引数を使用して、ステートメントでparamを使用するかどうかを決定することを減らします。下記を参照してください:

 @Param varchar(10) = NULL

 IF @Param IS NOT NULL
   BEGIN
     SELECT * FROM TABLE WHERE Column = @Param
   END
 ELSE
   BEGIN
     SELECT * FROM TABLE
   END

これをこのように1つの単純なクエリに減らすことはできますか?

 @Param varchar(10) = NULL

 SELECT * FROM TABLE WHERE Column = COALESCE( Any, @Param )

を調べましたが、ある種の機能Coalesceを使用できるかどうかわかりませんでした。Anyこれが理にかなっていることを願っています。

問題は、これをどのように達成するかです。2番目の質問は、どちらがパフォーマンスに優れているかということです。

4

1 に答える 1

5

anyスタイルコマンドはありませんが@Param、列自体の最初の値を使用してから値を使用すると、機能するはずです...

SELECT * FROM TABLE WHERE Column = COALESCE(@Param, Column)

がNullの場合@Param、それは無視され、リスト内の次の項目が使用されます。

同じことをするために使用することもできますIsNull...

SELECT * FROM TABLE WHERE Column = ISNULL(@Param, Column)

質問の2番目の部分に答えるために、別のステートメントを使用する方が常に効率的であると私は感じています。凝縮されたバージョンはコードが少ないかもしれませんが、必ずしも理解しやすく、実行が速いとは限りません。

于 2012-12-11T08:51:55.890 に答える