Eu tenho uma consulta MS SQL CTE a partir da qual desejo criar uma tabela temporária. Não tenho certeza de como fazê-lo, pois dá um Invalid Object name
erro.
Abaixo está toda a consulta para referência
SELECT * INTO TEMPBLOCKEDDATES FROM
;with Calendar as (
select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, EventStartDate as PlannedDate
,EventType from EventCalender
where EventActive = 1 AND LanguageID =1 AND EventBlockDate = 1
union all
select EventID, EventTitle, EventStartDate, EventEndDate, EventEnumDays,EventStartTime,EventEndTime, EventRecurring, dateadd(dd, 1, PlannedDate)
,EventType from Calendar
where EventRecurring = 1
and dateadd(dd, 1, PlannedDate) <= EventEndDate
)
select EventID, EventStartDate, EventEndDate, PlannedDate as [EventDates], Cast(PlannedDate As datetime) AS DT, Cast(EventStartTime As time) AS ST,Cast(EventEndTime As time) AS ET, EventTitle
,EventType from Calendar
where (PlannedDate >= GETDATE()) AND ',' + EventEnumDays + ',' like '%,' + cast(datepart(dw, PlannedDate) as char(1)) + ',%'
or EventEnumDays is null
order by EventID, PlannedDate
option (maxrecursion 0)
Eu apreciaria um ponto na direção certa ou se eu posso criar uma tabela temporária a partir desta consulta CTE
sql
sql-server
common-table-expression
Aprendendo
fonte
fonte
Respostas:
DDL de amostra
Certifique-se de que a tabela seja excluída após o uso
fonte
Realmente, o formato pode ser bastante simples - às vezes não há necessidade de predefinir uma tabela temporária - ela será criada a partir dos resultados da seleção.
Portanto, a menos que você queira tipos diferentes ou seja muito rigoroso quanto à definição, mantenha as coisas simples. Observe também que qualquer tabela temporária criada dentro de um procedimento armazenado é descartada automaticamente quando o procedimento armazenado termina a execução. Se o procedimento armazenado A criar uma tabela temporária e chamar o procedimento armazenado B, B poderá usar a tabela temporária que A criou.
No entanto, geralmente é uma boa prática de codificação eliminar explicitamente todas as tabelas temporárias criadas de qualquer maneira.
fonte
select * into #temp
, mas, na segunda vez, a execução gera um erro: "A tabela #temp já existe no banco de dados" .O
SELECT ... INTO
precisa estar no select do CTE.fonte
Como usar TempTable no procedimento armazenado?
Aqui estão os passos:
CRIAR TABELA DE TEMP
INSERIR TEMP SELECIONAR DADOS NA TABELA DE TEMP
SELECT TEMP TABLE (Agora você pode usar esta consulta de seleção)
PASSO FINAL DEIXAR A MESA
Espero que isso ajude. Simples e claro :)
fonte
Aqui, usando a cláusula into, a tabela é criada diretamente
fonte
Aqui está uma pequena alteração nas respostas de uma consulta que cria a tabela após a execução (ou seja, você não precisa criar a tabela primeiro):
fonte