【发布时间】:2012-07-21 03:11:39
【问题描述】:
我如何编写一个 SQL 存储过程,我希望参数在 select 语句中是可选的?
【问题讨论】:
-
什么数据库系统,哪个版本? SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...有关存储过程等功能的详细信息通常是供应商- 特定的 - 所以我们真的需要知道您使用的是什么数据库系统....
我如何编写一个 SQL 存储过程,我希望参数在 select 语句中是可选的?
【问题讨论】:
试试这个.. 使控制过滤的 SP 输入参数可选,默认值为 null。在每个 select 语句的 Where 子句中,这样写谓词:
Create procedure MyProcedure
@columnNameValue [datatype] = null
As
Select [stuff....]
From table
Where ColumnName = Coalesce(@columnNameValue , ColumnName)
这样,如果您不包含参数,或者如果您为参数传递空值,则 select 语句将过滤列值等于自身的位置(实际上根本不对该列进行过滤。 )
对此唯一的负面影响是它阻止您将空值作为有意义的值传递以仅显式过滤空值....(即,仅选择值为空的行)一旦上述技术已被采用,您需要添加另一个参数来实现该类型的需求。 (比如说,@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)
【讨论】: