0

任意のソースから引数を取り込んでいますが、SQL クエリの where 句として渡す必要がある 1、2、または 3 つの引数が渡される場合があります。

どのような引数が渡されても、できるだけ多くの引数でクエリが実行されるように、このクエリを作成するにはどうすればよいですか。私が考えていた:

Passed in: x=1,y=null,z=5

//Do some simple checks and assign local variables when the value are not null.

if(arg == null) 
{
arg = (/*some wild card that allows any value to be returned*/)
}
else{
arg = arg
}

生成された句: WHERE X=localx AND Y=(ANY VALUE) AND Z=localz

この例の Y には何を使用すれば、可変量の引数を持つ文字列を動的に作成することを避けることができますか? 私は、この問題を明確に表現するのに非常に苦労していることに気づきました。

4

2 に答える 2

4

ここでは SQL Server を想定しています。指定されていない場合は、ISNULL コマンドを使用して、すべての着信パラメーターをヌルにします。

SELECT *
FROM Table
WHERE ISNULL(@Param1,Field1)=Field1
AND ISNULL(@Param2,Field2)=Field2
AND ISNULL(@Param3,Field3)=Field3
AND ISNULL(@Param4,Field4)=Field4
AND ISNULL(@Param5,Field5)=Field5
于 2013-01-04T19:02:44.000 に答える
3

いずれかのフィールドに NULL 値が含まれている可能性がある場合のより良い解決策は次のとおりです。

SELECT *
FROM Table
WHERE (@Param1 is null or @Param1 = Field1) and
      (@Param2 is null or @Param2 = Field2) and
      (@Param3 is null or @Param3 = Field3) and
      (@Param4 is null or @Param4 = Field4) and
      (@Param5 is null or @Param5 = Field5)

これと使用するソリューションの主な違いisnullは、このバージョンがフィールドで NULL 値を処理することです。isnull(@param1, field1) = field1@param1 が NULL で field1 が NULL の場合、式は false を返します。@Param1 is null or @Param1 = Field1両方が NULL の場合、式は true を返します。

于 2013-01-04T20:34:23.480 に答える