Ich habe eine MS SQL CTE-Abfrage, aus der ich eine temporäre Tabelle erstellen möchte. Ich bin nicht sicher, wie ich es machen soll, da es einen Invalid Object name
Fehler gibt .
Unten finden Sie die gesamte Referenzabfrage
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 die richtige Richtung freuen oder darüber, ob ich aus dieser CTE-Abfrage eine temporäre Tabelle erstellen kann
Antworten:
Beispiel DDL
Stellen Sie sicher, dass die Tabelle nach der Verwendung gelöscht wird
quelle
Das Format kann sehr einfach sein - manchmal muss keine temporäre Tabelle vordefiniert werden - es wird aus den Ergebnissen der Auswahl erstellt.
Halten Sie die Dinge einfach, es sei denn, Sie möchten unterschiedliche Typen oder sind sehr streng in der Definition. Beachten Sie auch, dass alle temporären Tabellen, die in einer gespeicherten Prozedur erstellt wurden, 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 von A erstellte temporäre Tabelle verwenden.
Es wird jedoch allgemein als gute Codierungspraxis angesehen, jede von Ihnen erstellte temporäre Tabelle explizit zu löschen.
quelle
select * into #temp
aber beim zweiten Mal die Ausführung einen Fehler liefert: "Die Tabelle #temp existiert bereits in der Datenbank" .Das
SELECT ... INTO
muss in der Auswahl aus dem CTE sein.quelle
Wie verwende ich TempTable in gespeicherten Prozeduren?
Hier sind die Schritte:
TEMP-TABELLE ERSTELLEN
INSERT TEMP SELECT DATA IN TEMP TABLE
SELECT TEMP TABLE (Sie können jetzt diese Auswahlabfrage verwenden)
SCHLUSS SCHRITT TROPFEN SIE DIE TABELLE
Ich hoffe das wird helfen. Einfach und klar :)
quelle
Hier wird mit der into-Klausel die Tabelle direkt erstellt
quelle
Hier ist eine geringfügige Änderung an den Antworten einer Abfrage, die die Tabelle bei der Ausführung erstellt (dh Sie müssen die Tabelle nicht zuerst erstellen):
quelle