报表生成器在递归CTE

时间:2016-01-25 09:19:04

标签: reporting-services sql-server-2008-r2 reportbuilder3.0 recursive-cte

我使用递归CTE我找到了here来获取某个范围内的日期:

WITH T(d)
AS
( 
SELECT @DateFrom 
UNION ALL
SELECT CAST(DateAdd(DD,1,T.d) AS DATETIME) FROM T WHERE T.d < @DateTo
)
SELECT d FROM T OPTION (MAXRECURSION 32767);

这个CTE在我的SQL Server上运行正常,但是当尝试在Report Builder 3.0中使用此查询创建数据集时,我获得了“定义查询参数”对话框(我通常不会得到)以及之后单击确定我收到错误:Types don't match between the anchor and the recursive part in column "d" of recursive query "T".

我知道DATEADD会返回SMALLDATETIME,而我报告构建器会将DATETIME传递给@DateFrom,所以我认为将DATEADD的返回值归为{ {1}}会解决它,但它没有。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

只是预感,请尝试以下方法: -

WITH T(d)
AS
( 
SELECT cast(@DateFrom as datetime) as d
UNION ALL
SELECT CAST(DateAdd(DD,1,T.d) AS DATETIME) FROM T WHERE T.d < @DateTo
)
SELECT d FROM T OPTION (MAXRECURSION 32767);