【发布时间】:2021-04-07 18:05:59
【问题描述】:
我遇到了一个问题,即我们不能在视图中使用下面的查询,而只能在表中使用。不幸的是,我们处理的情况是我们没有表格作为该项目的选项。
我很好奇是否有人知道我应该寻找哪个方向来代替底层逻辑:
我尝试做的是通过执行以下查询为日期范围内的每一天创建一条记录:
WITH CTE_PerDay AS (
SELECT
TableDateRange.objectId
,TableDateRange.amount
,TableDateRange.beginDate
,COALESCE(TableDateRange.endDate, '2099-12-31') AS endDate
FROM TableDateRange
UNION ALL
SELECT
CTE_PerDay.objectId
,CTE_PerDay.amount
,DATEADD(DAY, 1, CTE_PerDay.beginDate) AS beginDate
,CTE_PerDay.endDate
FROM CTE_PerDay
WHERE GETDATE() > DATEADD(DAY, 1, CTE_PerDay.beginDate)
)
SELECT * FROM CTE_PerDay
OPTION (maxrecursion 0)
样本数据集TableDataRange
| ObjectId | Amount | beginDate | endDate |
|---|---|---|---|
| 1 | 500 | 2020-01-03 | |
| 2 | 35 | 2015-05-31 | 2019-10-01 |
| 3 | 200 | 2017-03-15 | 2020-06-02 |
CREATE TABLE TableDateRange
(
ObjectId varchar(300),
Amount int,
beginDate date,
endDate date
);
INSERT INTO TableDateRange ( ObjectId , Amount , beginDate , endDate )
VALUES
('1', 500, '2020-01-03', NULL),
('2', 35, '2015-05-31', '2019-10-01'),
('3', 200, '2017-03-15', '2020-06-02');
所以查询运行良好,但是在视图中我不能使用OPTION 功能,没有它我得到错误“语句终止。在语句完成之前,最大递归 100 已用完。
有什么建议吗?
【问题讨论】:
标签: sql tsql datetime sql-server-2012 recursive-query