Как создать таблицу дат с заданным диапазоном дат и времени?

#sql-server #tsql #ddl

#sql-сервер #tsql #ddl

Вопрос:

Я пытаюсь создать таблицу для календаря.Но sql server останавливается на '2000-01-11 17:45' . Как я могу создать даты, добавив 15 минут до 2050 года

 Create Table Calendar
(id int IDENTITY(1,1) Primary key,CalendarDate DATETIME)


Declare @beginDate DATETIME, @endDate DATETIME
Select @beginDate = '2000-01-01 17:45', @endDate = '2050-01-01 09:00'


While @beginDate <= @endDate 
Begin
    Insert Into dbo.Calendar(CalendarDate)
    Select
        @beginDate As CalendarDate     

    Set @beginDate = DateAdd(MINUTE, 15, @beginDate)
End
 

Комментарии:

1. Ваш существующий код очень медленный, но он работает. Это приведет к вставке 1 753 214 строк. У вас есть тайм-аут для запроса? Я думаю, что ваша проблема в другом месте.

2. Я решил проблему, спасибо.

Ответ №1:

Ваш текущий синтаксис подсказывает SQL Server , поэтому я бы попробовал с рекурсивным CTE :

 with cte as (
      select @beginDate as  st
      union all
      select DATEADD(MINUTE, 15, st)
      from cte
      where st < @endDate

)

Insert Into dbo.Calendar(CalendarDate)
   select st as CalendarDate
   from cte
   option (maxrecursion 0);
 

Комментарии:

1. запрос остановлен в 2000-01-22 03:30:00.000

2. извините, что этого не произошло. я выбрал top 1000