如何编写一个 SQL 存储过程,其中我希望参数在 select 语句中是可选的?
问问题
1072 次
1 回答
4
试试这个.. 使控制过滤的 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)
于 2012-07-22T19:02:12.977 回答