关于Repert Servcies下有判断时的参数问题

潮起潮落 2013-06-24 12:38:30
我现在如果有一个报表,命令类型是Text,配置了几个报表参数,如果是以下这个形式就执行成功:

if(@TimeType=1)
begin

  查询

end

else if (@TimeType = 2)

begin

  查询

end


但是如果我在这前面加上一系列的判断+赋值,就像这样

if(@Year is not null and @quarter is not null)
begin
if(@quarter =1)
begin
set @startDate =convert(datetime, @Year+'-1-1')
set @EndDate=convert(datetime, @Year+'-3-31')
end
else if(@quarter =2)
begin
set @startDate =convert(datetime, @Year+'-4-1')
set @EndDate =convert(datetime, @Year+'-6-30')
end
else if(@quarter =3)
begin
set @startDate =convert(datetime, @Year+'-7-1')
set @EndDate =convert(datetime, @Year+'-9-30')
end
else if(@quarter =4)
begin
set @startDate =convert(datetime, @Year+'-10-1')
set @EndDate =convert(datetime, @Year+'-12-31')
end
else if(@quarter =5)
begin
set @startDate =convert(datetime, @Year+'-1-1')
set @EndDate =convert(datetime, @Year+'-6-30')
end
else if(@quarter =6)
begin
set @startDate =convert(datetime, @Year+'-7-1')
set @EndDate =convert(datetime, @Year+'-12-31')
end
else if(@quarter =7)
begin
set @startDate =convert(datetime, @Year+'-1-1')
set @EndDate =convert(datetime, @Year+'-12-31')
end

end

if(@TimeType=1)
begin

  查询

end

else if (@TimeType = 2)

begin

  查询

end


在预览的时候就会提示
“本地报表处理期间出错。处理报表时出错。XXX,必须声明标量变量@Year,必须声明标量变量@quarterxxxxxxxx”
让人非常想不明白,正常的T-SQL的话,怎么会前面加上几个判断就导致参数不生效呢?
...全文
131 点赞 收藏 11
写回复
11 条回复
潮起潮落 2013年06月25日
引用 7 楼 stublue 的回复:
[quote=引用 6 楼 KongHuLu 的回复:] [quote=引用 5 楼 stublue 的回复:] [quote=引用 4 楼 KongHuLu 的回复:] [quote=引用 3 楼 stublue 的回复:] "必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
按理说报表的话,变量是不用声明的,在报表参数那里配置就可以了。 我去掉上面那些判断,在下面的查询中依然用到了这些变量,就丝毫没有问题。[/quote] 我觉得你这现象很奇怪。 从错误提示来看,肯定是变量声明或者配置有问题[/quote] 嗯。。我也相当奇怪啊,以前是没有写过report services的项目的,这是帮同事解决一下问题。 刚才把上面那一大串判断全部改成case when方式写到查询语句里面了,运行没问题了。 但是还是不知道是什么问题报这个错,难道report services在Text的命令方式下,只能写单条的select语句?不能像一个MSSQL里面正常的查询那样去写?[/quote] 肯定不是的,我就用过if[/quote] 简单的If逻辑是可以的,你看主帖,正常的场景就是用了if的。 但是你可以尝试一下构造下面所说的场景。
回复 点赞
潮起潮落 2013年06月25日
引用 10 楼 rockyljt 的回复:
这样设置后预览时就必须先选择Year再选择quarter后,startDate和EndDate才会由灰变亮且其默认值会依据你所选择Year、quarter的值而相应的变化
很好的思路!可能在报表这部分,我一开始就想得歪了,不管是遇到的问题还是最后的解决都是基于代码。 非常感谢!
回复 点赞
---涛声依旧--- 2013年06月25日
这样设置后预览时就必须先选择Year再选择quarter后,startDate和EndDate才会由灰变亮且其默认值会依据你所选择Year、quarter的值而相应的变化
回复 点赞
---涛声依旧--- 2013年06月25日
楼主请再检查各参数类型是否设置正确: @quarter、@TimeType必须为整形; @Year、@startDate、@EndDate必须是日期型; Reporting Services最强大的功能就是表达式了,我看了一下楼主的意思无非是想根据@quarter的值,让开始结束日期的默认值不同,所以建议楼主不要在数据集中去处理了,还是在参数的默认值里去设置表达式了。即@Year、@quarter设置成始终刷新,@startDate、@EndDate也设置成始终刷新,其默认值里分别用表达式来实现你最前面的那部分功能
回复 点赞
Leon_He2014 2013年06月24日
引用 6 楼 KongHuLu 的回复:
[quote=引用 5 楼 stublue 的回复:] [quote=引用 4 楼 KongHuLu 的回复:] [quote=引用 3 楼 stublue 的回复:] "必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
按理说报表的话,变量是不用声明的,在报表参数那里配置就可以了。 我去掉上面那些判断,在下面的查询中依然用到了这些变量,就丝毫没有问题。[/quote] 我觉得你这现象很奇怪。 从错误提示来看,肯定是变量声明或者配置有问题[/quote] 嗯。。我也相当奇怪啊,以前是没有写过report services的项目的,这是帮同事解决一下问题。 刚才把上面那一大串判断全部改成case when方式写到查询语句里面了,运行没问题了。 但是还是不知道是什么问题报这个错,难道report services在Text的命令方式下,只能写单条的select语句?不能像一个MSSQL里面正常的查询那样去写?[/quote] 肯定不是的,我就用过if
回复 点赞
潮起潮落 2013年06月24日
引用 5 楼 stublue 的回复:
[quote=引用 4 楼 KongHuLu 的回复:] [quote=引用 3 楼 stublue 的回复:] "必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
按理说报表的话,变量是不用声明的,在报表参数那里配置就可以了。 我去掉上面那些判断,在下面的查询中依然用到了这些变量,就丝毫没有问题。[/quote] 我觉得你这现象很奇怪。 从错误提示来看,肯定是变量声明或者配置有问题[/quote] 嗯。。我也相当奇怪啊,以前是没有写过report services的项目的,这是帮同事解决一下问题。 刚才把上面那一大串判断全部改成case when方式写到查询语句里面了,运行没问题了。 但是还是不知道是什么问题报这个错,难道report services在Text的命令方式下,只能写单条的select语句?不能像一个MSSQL里面正常的查询那样去写?
回复 点赞
Leon_He2014 2013年06月24日
引用 4 楼 KongHuLu 的回复:
[quote=引用 3 楼 stublue 的回复:] "必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
按理说报表的话,变量是不用声明的,在报表参数那里配置就可以了。 我去掉上面那些判断,在下面的查询中依然用到了这些变量,就丝毫没有问题。[/quote] 我觉得你这现象很奇怪。 从错误提示来看,肯定是变量声明或者配置有问题
回复 点赞
潮起潮落 2013年06月24日
引用 3 楼 stublue 的回复:
"必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
按理说报表的话,变量是不用声明的,在报表参数那里配置就可以了。 我去掉上面那些判断,在下面的查询中依然用到了这些变量,就丝毫没有问题。
回复 点赞
Leon_He2014 2013年06月24日
"必须声明标量变量@Year,必须声明标量变量@quarterx" 楼主在哪里声明的这两个变量呢
回复 点赞
潮起潮落 2013年06月24日
引用 1 楼 hdhai9451 的回复:
你的日期取值不是好办法,每个月的最后一天应该用下月的第一天减去一天,不等于上月最后一天
嗯 这样的话应该会取最后一天24小时的。 不过这应该不是关键问题,这是同事让帮忙解决的问题0.0 LS能帮忙看看加上前一段判断就不能接收到保镖参数的问题吗
回复 点赞
Andy__Huang 2013年06月24日
你的日期取值不是好办法,每个月的最后一天应该用下月的第一天减去一天,不等于上月最后一天
回复 点赞
发动态
发帖子
应用实例
创建于2007-09-28

1.1w+

社区成员

6.8w+

社区内容

MS-SQL Server 应用实例
社区公告
暂无公告