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