2013-04-09 2 views
-1

ситуация: у меня есть 2 стола. Один, где есть 2 поля StartDate & EndDate. И одна таблица, где есть только одна дата поля. Поэтому, когда вы получили 3 дня между Start и Enddate. Он должен вставить 3 строки в новую таблицу.Контур CTE в петле

У меня есть следующий код, и он вставляет совершенную мою линию в таблицу.

with View_Solidnet_Training as 
(
select cast('2013-04-09' as datetime) DateValue 
union all 
select DateValue + 1 
from View_Solidnet_Training 
where DateValue + 1 <= cast('2013-04-11' as datetime) 
) 
insert into OBJ_Availability 
select 34, DateValue, 'AM', 2, 'Test' from View_Solidnet_Training; 

Но теперь, после того, как он вставляет строки в новый стол, он останавливается. Но после цикла он должен снова изменить Start и EndDate в новых значениях следующей строки в представлении: View_Solidnet_Training.

Итак, есть ли возможное решение, или я должен создать новый цикл, где я проверяю, не равен ли идентификатор представления нулю?

ответ

0

Как я понимаю ваш вопрос, я думаю, вы должны начать с получения дат в список, а затем вставить.

Пример:

create table Dates 
(
startdate datetime, 
endDate datetime 
) 

insert dates 
SELECT '2013-04-06','2013-04-08' 

SELECT * from Dates 

Declare @date int 
Declare @tbl table 
(
date_ datetime 
) 

SELECT @date = datediff(day,startDate-1,EndDate) from Dates 
SELECT @date 

while(@date != 0) 
Begin 

insert into @tbl 
SELECT dateadd(day,@date,StartDate-1) from dates 

set @date = @date -1 

END 

/* 
--TO-DO 
--Update StartDate and EndDate values in table Dates 
-- insert YourTable 
-- select date_ from @tbl 
*/ 
SELECT * from @tbl 
order by date_