SSRS参数数据参数在数据驱动的订阅失败

时间:2017-09-14 12:15:01

标签: sql-server date reporting-services parameters

我想知道是否有人能够提供帮助。

我有一套数据驱动的订阅,它使用以下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]

由于受影响的报告量很大,因此对所有报告执行此操作并不一定实用。

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

1 个答案:

答案 0 :(得分: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)