2017-09-14 88 views
0

我想知道是否有人能够提供帮助。SSRS参数数据参数在数据驱动订阅上失败

我有一套数据驱动的订阅,它使用以下SQL代码来计算参数。这与报告也使用相同的SQL Server数据源。

select cast(dateadd(day,case when datepart(dw,getdate()) in (5,6) then 4 else 2 end,getdate()) as date) [parameter] 

报告中的参数类型为日期。

这已工作15个月没有问题,但上周服务器升级后,现在停止工作。在调查时,错误日志表示上述内容没有给出有效日期。如果我手动在报告中输入日期,它可以正常工作。如果我在订阅中指定硬编码日期并查看报告,则结果现在似乎是逆转日期的月份和日期部分(用于该选项提供有效日期时)。

正如批评报道临时工作的时候,我已经成功通过转换结果的格式为varchar得到这个工作“YYYY-MM-DD”通过改变代码如下:

select left(convert(varchar,dateadd(day,case when datepart(dw,getdate()) in (5,6) then 4 else 2 end,getdate()),126),10) [parameter] 

由于受影响的报告数量众多,因此对于所有报告都做到这一点并不一定实际可行。

任何想法的原因和潜在的修复?

回答

0

我可以看到你的代码产生错误的原因。由于服务器上的SET DATEFIRST配置,您可能会得到错误的结果。

首先,检查你的Datadirst与

SELECT @@DATEFIRST 

,并设置它在你的代码像它

DECLARE @Date date = '20170914' -- Thursday 


SET DATEFIRST 1 ; 
SELECT datepart(dw,@Date) 
--Result 4 

SET DATEFIRST 2 ; 
SELECT datepart(dw,@Date) 
--Result 3 

SET DATEFIRST 3 ; 
SELECT datepart(dw,@Date) 
--Result 2 

SET DATEFIRST 4 ; 
SELECT datepart(dw,@Date) 
--Result 1 

SET DATEFIRST 5 ; 
SELECT datepart(dw,@Date) 
--Result 7 

SET DATEFIRST 6 ; 
SELECT datepart(dw,@Date) 
--Result 6 

SET DATEFIRST 7 ; 
SELECT datepart(dw,@Date) 
--Result 5 

SET DATEFIRST (Transact-SQL)

SET DATEFORMAT

SET LANGUAGE (Transact-SQL)

+0

我看到:但是,我不确定为什么这会产生变化,因为看起来正在发生的事情是由我发布的代码返回的日期正常工作。 什么问题是,它的行为就好像我用错误的格式硬编码日期,尽管事实上我没有硬编码任何数据。 – Boydus

+0

我明白了,我推断了fisrtdate,因为你没有发布错误只是描述,几周前我也有类似的问题,这是解决方案。 –

+0

我没有发布错误,因为SSRS实际上没有告诉我错误是什么。它所说的只是:'完成:1个加工总数为1; 1错误。“# – Boydus