1

我有一个查询来填写报告参数:

select distinct [Source No_] from _report_sales_master
where [Industry] = @Industries
and [posting date] >= dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000') 
and  [posting date] < dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000')
order by [Source No_]

查询产生一个列表,我用它来填充多值报告参数。

当我运行查询时,它会生成正确的结果。

当我运行报告时,“Source No_”参数保持为空,无论我选择哪个@year 或@industries

当我从查询中删除“发布日期”子句时,参数列表会填充并正常工作。

我错过了什么?

4

2 回答 2

0

尝试将硬编码的日期(字符串文字)以'yyyy-mm-dd'. 我发现当以您拥有的格式(即 dd/mm/yyyy 或 mm/dd/yyyy)输入日期时,SSRS 可以混淆哪个是月份,哪个是日期。

我已经在 db 和 SSRS 级别进行了各种设置以进行日期本地化,并发现您格式中的任何日期字符串都可能导致问题(我不知道具体原因)。

当您使用字符串文字时,会执行隐式转换以将其解析为以下之一: time, date, smalldatetime, datetime, datetime2datetimeoffset值。

防止日期错误的另一种方法是用显式强制转换替换您的字符串文字,例如:

  • CONVERT(datetime, '2012-06-01', 101)假设月份 = 六月
  • CONVERT(datetime, '2012-01-06', 101)假设月份 = 一月

我能想到要检查的唯一另一件事是报告中的参数设置为列的正确数据类型[Source No_]

于 2012-10-29T02:25:27.143 回答
0

把它放在你的数据库中并玩弄:

DECLARE @year DATETIME
SELECT @year = TypeDateTimeInputHere
SELECT dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000') [GT posting date]
,dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000') [LT posting date]

我不知道你试图用你的大于或等于(GT)和小于(LT)逻辑做什么,但我认为它没有达到你所期望或想要的效果。每次我测试它时,我都会得到相同的结果,除非我强制将 [发布日期] 设置为小于 2000 年 1 月 6 日的某个日期。

显然,将“TypeDateTimeInputHere”替换为您知道或预计会出现在 [发布日期] 中的示例值。

于 2012-10-30T14:07:53.353 回答