Comment créer une table temporaire avec SELECT * INTO tempTable FROM Cte Query
J'ai une requête MS SQL CTE à partir de laquelle je veux créer une table temporaire. Je ne suis pas sûr de savoir comment le faire car cela donne une erreur Invalid Object name
.
Ci-dessous est toute la requête pour référence
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)
J'apprécierais un point dans la bonne direction ou si je peux créer une table temporaire à partir de cette requête CTE
5 réponses
Échantillon 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
Assurez-vous que la table est supprimée après utilisation
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
Vraiment le format peut être assez simple-parfois il n'y a pas besoin de prédéfinir une table temporaire-il sera créé à partir des résultats de la sélection.
Select FieldA...FieldN
into #MyTempTable
from MyTable
Donc, à moins que vous ne vouliez différents types ou que vous soyez très strict sur la définition, gardez les choses simples. Notez également que toute table temporaire créée dans une procédure stockée est automatiquement supprimée lorsque la procédure stockée se termine. Si la procédure stockée a crée une table temporaire et appelle la procédure stockée B, alors B pourra utiliser table temporaire créée.
Cependant, il est généralement considéré comme une bonne pratique de codage de supprimer explicitement chaque table temporaire que vous créez de toute façon.
Le SELECT ... INTO
doit être dans la sélection du 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)
Comment utiliser TempTable dans la procédure stockée?
Voici les étapes:
CRÉER UNE TABLE TEMPORAIRE
-- CREATE TEMP TABLE
Create Table #MyTempTable (
EmployeeID int
);
INSÉRER LES DONNÉES DE SÉLECTION DE TEMPÉRATURE DANS LA TABLE DE TEMPÉRATURE
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100
SELECT TEMP TABLE (vous pouvez maintenant utiliser cette requête select)
Select EmployeeID from #MyTempTable
DERNIÈRE ÉTAPE DÉPOSEZ LA TABLE
Drop Table #MyTempTable
J'espère que cela vous aidera. Simple et clair:)
Select Eventname,
count(Eventname) as 'Counts'
INTO #TEMPTABLE
FROM tblevent
where Eventname like 'A%'
Group by Eventname
order by count(Eventname)
Ici, en utilisant la clause into, la table est directement créée