wake-up-neo.com

So erstellen Sie eine Temp-Tabelle mit SELECT * INTO temp Tabelle FROM CTE-Abfrage

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 

108
Learning

Beispiel-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

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
190
user1499112

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.

108
Rohit

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) 
22
Martin Smith

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 :)

18
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

0