SSMS - 存储过程中参数的数量不同

时间:2013-02-18 15:44:48

标签: sql tsql ssms

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

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

2 个答案:

答案 0 :(得分: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

另请参阅:Optional and named arguments in C# a comparison with SQL Server stored procs

不是这样做,为什么不使用开始日期和结束日期,还是可以选择多年来的特别季度?

答案 1 :(得分:1)

我认为你可以通过两个参数来极大地简化事情。第一个将指定搜索周期的开始,第二个将指定结束。无论这些是日期,年月还是期间名称都可以解决,