Ich habe eine MS SQL CTE-Abfrage, aus der ich eine temporäre Tabelle erstellen möchte. Ich bin nicht sicher, wie es geht, da es einen Invalid Object name
-Fehler gibt.
Nachfolgend finden Sie die gesamte Abfrage
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)
Ich würde mich über einen Punkt in der richtigen Richtung freuen oder wenn ich aus dieser CTE-Abfrage eine temporäre Tabelle erstellen kann
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
Stellen Sie sicher, dass die Tabelle nach der Verwendung gelöscht wird
If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
Drop Table #Temp
End
Das Format kann wirklich recht einfach sein - manchmal muss keine temporäre Tabelle vordefiniert werden - es wird aus den Ergebnissen der Auswahl erstellt.
Select FieldA...FieldN
into #MyTempTable
from MyTable
Halten Sie die Dinge also einfach, es sei denn, Sie möchten unterschiedliche Typen oder sind sehr streng definiert. Beachten Sie auch, dass alle temporären Tabellen, die in einer gespeicherten Prozedur erstellt werden, automatisch gelöscht werden, wenn die Ausführung der gespeicherten Prozedur abgeschlossen ist. Wenn die gespeicherte Prozedur A eine temporäre Tabelle erstellt und die gespeicherte Prozedur B aufruft, kann B die temporäre Tabelle verwenden, die A erstellt hat.
Im Allgemeinen gilt es jedoch als gute Kodierungsmethode, jede temporäre Tabelle, die Sie erstellen, explizit zu löschen.
Der SELECT ... INTO
muss aus dem CTE ausgewählt werden.
;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)
Wie Verwenden von TempTable in gespeicherter Prozedur?
Hier sind die Schritte:
CREATE TEMP TABLE
-- CREATE TEMP TABLE
Create Table #MyTempTable (
EmployeeID int
);
INSERT TEMP SELECT DATEN IN TEMP TABELLE EINFÜGEN
-- INSERT COMMON DATA
Insert Into #MyTempTable
Select EmployeeID from [EmployeeMaster] Where EmployeeID between 1 and 100
SELECT TEMP TABLE (Sie können diese Auswahlabfrage jetzt verwenden.)
Select EmployeeID from #MyTempTable
ENDLICHER SCHRITT TROPFEN DIE TABELLE
Drop Table #MyTempTable
Ich hoffe das wird helfen. Einfach und klar :)
Select Eventname,
count(Eventname) as 'Counts'
INTO #TEMPTABLE
FROM tblevent
where Eventname like 'A%'
Group by Eventname
order by count(Eventname)
Mit der In-Klausel wird die Tabelle direkt erstellt