SSRS參數是一種痛苦。我希望能夠通過允許用戶訪問許多不同的參數並使其成爲可選項來重用報告以滿足許多不同的需求。SSRS參數。允許「全部」或「空」
所以,如果我在開始時的代碼,如:
Select * from mytable myt
where myt.date between '1/1/2010' and '12/31/2010'
and year(myt.date) = '2010'
and myt.partnumber = 'XYZ-123'
我想這些參數是可選的,所以我的第一次嘗試是使參數默認爲空,例如:
and (myt.partnumber = (@PartNumber) or (@PartNumber) is null)
這有問題,因爲如果有問題的數據庫字段可以爲空,那麼您將刪除記錄,因爲null不等於null。
然後我用如下代碼:
DECLARE @BeginDate AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @PartNumber AS VARCHAR(25)
SET @Year = '..All'
SET @BeginDate = '1/1/2005'
SET @EndDate = '12/31/2010'
SET @PartNumber = '..All'
SET @Year = '..All'
Select * from mytable myt
where (myt.date between (@BeginDate) and (@EndDate))
and (year(myt.date) = (@Year) or (@Year) = '..All')
and (myt.partnumber = (@PartNumber) or (@PartNumber) = '..All')
這並不工作,因爲年(myt.date)是一個整數,@Year不是。
所以,這是我的問題。
- 如何讓我的日期可選?是簡單地將它們默認爲實際範圍外的日期的最好方法,所以我返回所有值?
- 處理null或'..All'選項以使我的查詢儘可能可讀並允許我的用戶擁有大多數數據類型的可選參數的最佳方法是什麼?我寧願不爲
我曾考慮過使用case語句,但問題是如果我有10個參數並且大多數是Case語句,SQL語句會變得非常冗長和混亂。 – DavidStein 2010-07-28 13:38:50
你可以選擇年份和partnumber(如-1)的幻數,然後你不需要投射或轉換任何東西。這允許您使用第二個代碼塊。 – 2010-07-28 17:56:55