2013-11-07 3 views
-2
CREATE TABLE #DaysTable(tdays datetime) 
    -- SET NOCOUNT ON added to prevent extra result sets from 

    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

WITH 

CTE_Days AS 

(

SELECT DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))) Days 

UNION ALL 

SELECT DATEADD(day, 1, Days) 

FROM CTE_Days 

WHERE Days < DATEADD(day, -1, DATEADD(month, 1, DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))))) 

) 

insert into #dayatable 
select * from 
    (
SELECT DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))) Days 

UNION ALL 

SELECT DATEADD(day, 1, Days) 

FROM CTE_Days 

WHERE Days < DATEADD(day, -1, DATEADD(month, 1, DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))))) 
) 

Но это дает мне ошибку.Я хочу вставить значения в @temp или #table, возвращаемые CTE в SQL Server

ответ

1

Поправьте меня, если я ошибаюсь, вы повторили то же состояние после вставки в заявлении, которое уже существует в КТР, и если это так, то вы можете просто написать, как показано ниже:

WITH CTE_Days AS 
(
SELECT DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))) Days 
UNION ALL 
SELECT DATEADD(day, 1, Days) 
FROM CTE_Days 
WHERE Days < DATEADD(day, -1, DATEADD(month, 1, DATEADD(month, @month, DATEADD(month, -MONTH(@dataforDate), DATEADD(day, -DAY(@dataforDate) + 1, CAST(FLOOR(CAST(@dataforDate AS FLOAT)) AS DATETIME)))))) 
) 
insert into #DaysTable 
select * from CTE_Days; 
0
  • Каждый выбор, вставка, обновление или удаление является отдельным заявлением.
  • Таким образом, каждому нужно выражение CTE .
  • Только первый имеет его.
Смежные вопросы