如何使用SQL存储过程编写过滤的查询?

问题描述:

我该如何编写一个SQL存储过程,我希望参数在select语句中是可选的?如何使用SQL存储过程编写过滤的查询?

+0

** **什么数据库系统,以及哪个版本? * SQL *只是*结构化查询语言* - 许多数据库系统使用的语言,但不是数据库产品......有关存储过程等功能的细节通常是供应商特定的 - 所以我们真的需要知道什么**数据库系统**你正在使用.... – 2012-07-22 19:53:02

试试这个。让SPs输入参数控制过滤可选,默认值为null。在每个SELECT语句的WHERE子句,写这样的谓词:

Create procedure MyProcedure 
    @columnNameValue [datatype] = null 
    As 

     Select [stuff....] 
     From table 
     Where ColumnName = Coalesce(@columnNameValue , ColumnName) 

这样,如果你不包括参数,或者如果你传递一个空值的参数,select语句将过滤的其中列值等于其本身(在该列上实际上根本不做任何滤波)

唯一的负面因素是它阻止您能够将null作为有意义的值传递给显式仅过滤空值....(即,只选择值为空的行)一旦采用上述技术,您将需要添加另一个参数来实现该类型的需求。 (比如说,@GetOnlyNulls TINYINT = 0,或类似的东西)

Create procedure MyProcedure 
    @columnNameValue [datatype] = null, 
    @GetOnlyNulls Tinyint = 0 
    As 

     Select [stuff....] 
     From table 
     Where (ColumnName Is Null And @GetOnlyNulls = 1) 
      Or ColumnName = Coalesce(@columnNameValue , ColumnName) 
+0

我喜欢这个。从来没有想过这样做。 +1 – CodeLikeBeaker 2012-07-22 19:04:17