我使用递归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}}会解决它,但它没有。
我在这里缺少什么?
答案 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);