0

我从任意来源引入参数,可能有 1,2 或 3 个参数需要作为 sql 查询中的 where 子句传递。

如何编写此查询,以便无论传递什么参数,查询都将使用尽可能多的参数运行。我刚在想:

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 使用什么,这样我就可以避免动态创建一个带有可变数量的 args 的字符串?我发现自己很难阐明这个问题。

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 回答