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