Sql 存储过程中WHERE子句的条件
我正在使用一个存储过程,其中我希望根据两个参数的值添加或删除where子句 到目前为止,我得到的是:Sql 存储过程中WHERE子句的条件,sql,sql-server,tsql,stored-procedures,where-clause,Sql,Sql Server,Tsql,Stored Procedures,Where Clause,我正在使用一个存储过程,其中我希望根据两个参数的值添加或删除where子句 到目前为止,我得到的是: WHERE t.iDdPais = @iIdPais AND t.iIdRegion = @iIdRegion AND t.dtFecha BETWEEN @dtStart AND @dtEnd 但是,如果@iIdPais是0(表示ALL),我需要从WHERE语句中删除该子句,这同样适用于@iIdRegion。您只需要使用普通布尔逻辑: WHERE (@iIdPaid
WHERE
t.iDdPais = @iIdPais
AND t.iIdRegion = @iIdRegion
AND t.dtFecha BETWEEN @dtStart AND @dtEnd
但是,如果@iIdPais是0(表示ALL),我需要从WHERE语句中删除该子句,这同样适用于@iIdRegion。您只需要使用普通布尔逻辑:
WHERE
(@iIdPaid = 0 OR t.iDdPais = @iIdPais)
AND (@iIdRegion=0 OR t.iIdRegion = @iIdRegion)
AND t.dtFecha BETWEEN @dtStart AND @dtEnd
将整个
SELECT
放入IF
子句中
IF(@ildPais =0 AND @ildRegion =0)
SELECT <THE DATASET> FROM THE TABLE
WHERE
t.iDdPais = @iIdPais
AND t.iIdRegion = @iIdRegion
AND t.dtFecha BETWEEN @dtStart AND @dtEnd
ELSE
SELECT <THE DATASET> FROM THE TABLE
--no where clause
IF(@ildPais=0和@ildRegion=0)
从表中选择
哪里
t、 iDdPais=@iIdPais
而t.iIdRegion=@iIdRegion
以及@dtStart和@dtEnd之间的t.dtFecha
其他的
从表中选择
--无where条款
您是否关心查询的性能?潜在的重复:(?)如果有任何重复,它就是这个:@GordonLinoff因为这是一个将不时执行的查询,而且这些表是目录式的,所以我更关心查询。非常优雅。谢谢如果数据集很小,那很好,但是如果表有一百万行呢?这两个额外的检查每次都会发生一百万次。这比公认的答案要好得多,因为后者的性能会很差。@HLGEM我不知道您使用的是什么RDBMS系统,但我是在sql server上进行的,它的表有数千万行,没有太多的问题。这些类型的查询永远不会是最快的,但是有了正确的索引,这种查询就可以了。