如何在Select命令中应用多项选择条件

时间:2015-09-01 17:04:13

标签: sql sql-server

我有一张表Tab1。我想创建一个存储过程,我将从用户那里获取3个参数,并使用AND运算符从表中选择数据。喜欢:

Select * from Tab1
Where Para1=1 AND  Para2=1 AND Para3=4

但我有条件,用户可以传递一个,两个或所有三个参数。我想写一个查询,如果他传递了所有三个参数,那么使用AND运算符根据这3个参数选择数据;如果他传递任何两个参数,则使用AND运算符根据这两个参数选择数据。最后,他可以传递一个参数,然后根据这个单一参数选择数据。

是否有办法为上述要求编写单个查询?

2 个答案:

答案 0 :(得分:1)

SELECT *
FROM Tab1
WHERE (@Para1 IS NULL OR (Para1 = @Para1))
    AND (@Para2 IS NULL OR (Para2 = @Para2))
    AND (@Para3 IS NULL OR (Para3 = @Para3))
OPTION (RECOMPILE);

那怎么可能呢,因为在OR短路时,即当@ Para1为空时(假设默认值在没有值时为null)它不会进入第二个条件,即Para1 = @ Para1,可能是由于性能原因,coz首先已经满足,这实际上意味着什么OR实际上意味着检查是否满足任何条款,并且与逻辑的其余部分相似或者你也可以进行动态查询

以下由KM添加评论。

最好使用OPTION(RECOMPILE),那么执行计划将不会被重用,因为select非常依赖于动态的参数,因此添加OPTION(RECOMPILE)会重新生成执行计划。

答案 1 :(得分:0)

尝试类似:

gem install pg -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config