0

我对放入存储过程的参数数量有疑问。我正在使用季度数据(参数格式 = 2012Q1、2012Q2 等)自动生成报告。
如果用户的第一个参数以Q1、Q2或Q3开头,则只有3年的数据,所以如果用户的第一个参数是2012Q1、2012Q2或2012Q3,则参数将在2014Q4结束......参数个数将有所不同,因为它需要 2012Q1-2012Q4 的 12 个参数、2012Q2-2014Q4 的 11 个参数和 2012Q3-2014Q4 的 10 个参数。

是否可以根据用户的第一个参数来更改声明的参数数量???有没有解决这个问题的好方法?

4

2 回答 2

3

不,这是不可能的,但是您可以让参数具有默认值 NULL,现在不需要传入值。

例子

create procedure prTest 
@i int = null, @i2 int = null
as
select @i,@i2
go

exec prTest 1  --just pass 1 parameter, 2nd is default
go
exec prTest   -- leave all as default
go
exec prTest @i2 = 5  --to pass in a param if it is not 1st, use names
go
exec prTest null,5  --same as above

另请参阅:C# 中的可选参数和命名参数与 SQL Server 存储过程的比较

与其这样做,您为什么不只使用开始日期和结束日期,或者他们可以从多年临时选择季度?

于 2013-02-18T15:47:19.483 回答
1

我认为您可以通过仅使用两个参数来极大地简化事情。第一个将指定搜索周期的开始,第二个将指定结束。无论这些是日期、年月还是时期的名称,您都可以弄清楚,

于 2013-02-18T15:50:27.853 回答