Я использовал рекурсивное общее табличное выражение CTE , которое ссылается на себя, чтобы решить эту проблему.Затем вы можете установить Dataset
параметров start_date
и end_date
.
Набор данных для значений по умолчанию параметров начальной и конечной даты
DECLARE @year AS INT
SET @year = 2018
SELECT [start_date] = DATEFROMPARTS(@year, 1, 1), [end_date] = DATEFROMPARTS(@year, 12, 31)
Набор данных для доступныхзначения параметров даты начала и окончания
DECLARE @year AS INT
SET @year = 2018
;WITH
source_data_dates
AS
(
SELECT
[date_start] = DATEFROMPARTS(@year, 1, 1)
, [date_end] = DATEFROMPARTS(@year, 12, 31)
)
,
year_date_list([rn], [date_value])
AS
(
SELECT
[rn] = 1
, [date_value] = CAST([date_start] AS DATETIME)
FROM
source_data_dates
UNION ALL
SELECT
[rn] = [rn] + 1
, [date_start] = CAST(DATEADD(DAY, [rn], [date_start]) AS DATETIME)
FROM
year_date_list
, source_data_dates
WHERE
[rn] <= DATEDIFF(DAY, [date_start], [date_end])
)
SELECT
[rn]
, [date_value]
FROM
year_date_list
OPTION (MAXRECURSION 0)
Результаты: