2013-02-18 53 views
0

我有一個關於存儲過程中存儲的參數數量的問題。 我使用季度數據自動化報表(參數格式= 2012Q1,2012Q2等)。
如果用戶的第一個參數以Q1,Q2或Q3開頭,則只有3年的數據,因此如果用戶的第一個參數是2012Q1,2012Q2或2012Q3,則參數將在2014Q4結束....數字因爲2012Q1-2012Q4需要12個參數,2012Q2-2014Q4需要11個參數,2012Q3-2014Q4需要10個參數。SSMS - 存儲過程中參數的數量不同

是否可以根據用戶的第一個參數是什麼來更改聲明的參數數量?是否有解決這個問題的好方法?

+1

不,不可能。您可以創建多個SP或使用默認值創建所有參數,並將邏輯添加到要使用的SP。 – sgeddes 2013-02-18 15:46:28

回答

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

而不是這樣做你爲什麼不使用開始日期和結束日期,或者他們可以選擇特設多年的宿舍?

+0

謝謝,我想我會嘗試執行開始年份和季度以及最後一個。 – Kristina 2013-02-18 16:03:35

1

我想你可以通過只有兩個參數來極大地簡化事情。第一個將指定搜索時間段的開始時間,第二個將指定結束時間。無論這些日期,年份或期間的名稱是你可以想出的東西,