Tengo una consulta MS SQL CTE a partir de la cual quiero crear una tabla temporal. No estoy seguro de cómo hacerlo, ya que da un Invalid Object name
error.
A continuación se muestra la consulta completa para referencia
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)
Agradecería un punto en la dirección correcta o si puedo crear una tabla temporal a partir de esta consulta CTE
sql
sql-server
common-table-expression
Aprendizaje
fuente
fuente
Respuestas:
DDL de muestra
Asegúrese de que la tabla se elimine después de usar
fuente
Realmente el formato puede ser bastante simple, a veces no es necesario predefinir una tabla temporal, se creará a partir de los resultados de la selección.
Entonces, a menos que desee diferentes tipos o sea muy estricto en la definición, mantenga las cosas simples. Tenga en cuenta también que cualquier tabla temporal creada dentro de un procedimiento almacenado se descarta automáticamente cuando el procedimiento almacenado termina de ejecutarse. Si el procedimiento almacenado A crea una tabla temporal y llama al procedimiento almacenado B, entonces B podrá usar la tabla temporal que A creó.
Sin embargo, generalmente se considera una buena práctica de codificación descartar explícitamente cada tabla temporal que cree de todos modos.
fuente
select * into #temp
pero, la segunda vez, la ejecución muestra un error: "La tabla #temp ya existe en la base de datos" .La
SELECT ... INTO
necesidad de estar en la selección del CTE.fuente
¿Cómo usar TempTable en el procedimiento almacenado?
Aquí están los pasos:
CREAR TABLA DE TEMPERATURA
INSERTAR TEMP SELECCIONAR DATOS EN LA TABLA DE TEMP
TABLA DE TEMPERATURA SELECCIONADA (ahora puede usar esta consulta de selección)
PASO FINAL DEJAR LA MESA
Espero que esto sea de ayuda. Simple y claro :)
fuente
Aquí, usando la cláusula into, la tabla se crea directamente
fuente
Aquí hay una pequeña alteración a las respuestas de una consulta que crea la tabla después de la ejecución (es decir, no tiene que crear la tabla primero):
fuente