#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