update into from ejemplo create sql sql-server common-table-expression

into - temp table sql 2016



Cómo crear tabla Temp con SELECT*INTO tempTable FROM CTE Query (5)

Muestra DDL

create table #Temp ( EventID int, EventTitle Varchar(50), EventStartDate DateTime, EventEndDate DatetIme, EventEnumDays int, EventStartTime Datetime, EventEndTime DateTime, EventRecurring Bit, EventType int )

;WITH Calendar AS (SELECT /*...*/) Insert Into #Temp 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

Asegúrese de que la tabla se elimine después de su uso

If(OBJECT_ID(''tempdb..#temp'') Is Not Null) Begin Drop Table #Temp End

Tengo una consulta MS SQL CTE desde la cual quiero crear una tabla temporal. No estoy seguro de cómo hacerlo, ya que da un Invalid Object name .

A continuación está toda la consulta 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


Cómo usar TempTable en el procedimiento almacenado?

Estos son los pasos:

CREAR TABLA DE TEMP.

-- CREATE TEMP TABLE Create Table #MyTempTable ( EmployeeID int );

INSERT TEMP SELECT DATA INTO TABLE table

-- INSERT COMMON DATA Insert Into #MyTempTable Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100

SELECCIONAR TABLA DE TEMPERATURAS (Ahora puede usar esta consulta de selección)

Select EmployeeID from #MyTempTable

PASO FINAL GOTA LA MESA

Drop Table #MyTempTable

Espero que esto sea de ayuda. Simple y claro :)


El SELECT ... INTO debe estar en la selección del CTE.

;WITH Calendar AS (SELECT /*... Rest of CTE definition removed for clarity*/) 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 INTO TEMPBLOCKEDDATES /* <---- INTO goes here*/ 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)


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.

Select FieldA...FieldN into #MyTempTable from MyTable

Entonces, a menos que desee tipos diferentes 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 creó A.

Sin embargo, generalmente se considera una buena práctica de codificación eliminar explícitamente cada tabla temporal que crees de todos modos.


Select Eventname, count(Eventname) as ''Counts'' INTO #TEMPTABLE FROM tblevent where Eventname like ''A%'' Group by Eventname order by count(Eventname)

Aquí al usar la cláusula into la tabla se crea directamente