Mam zapytanie CTE MS SQL, z którego chcę utworzyć tabelę tymczasową. Nie jestem pewien, jak to zrobić, ponieważ powoduje to Invalid Object name
błąd.
Poniżej znajduje się całe zapytanie w celach informacyjnych
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)
Byłbym wdzięczny za punkt we właściwym kierunku lub jeśli mogę utworzyć tymczasową tabelę z tego zapytania CTE
sql
sql-server
common-table-expression
Uczenie się
źródło
źródło
Odpowiedzi:
Przykładowy DDL
Upewnij się, że tabela została usunięta po użyciu
źródło
Naprawdę format może być dość prosty - czasami nie ma potrzeby wstępnego definiowania tabeli tymczasowej - zostanie utworzony z wyników selekcji.
Więc jeśli nie chcesz różnych typów lub nie masz bardzo ścisłej definicji, zachowaj prostotę. Należy również zauważyć, że każda tabela tymczasowa utworzona w procedurze składowanej jest automatycznie usuwana po zakończeniu wykonywania procedury składowanej. Jeśli procedura składowana A tworzy tabelę tymczasową i wywołuje procedurę składowaną B, wówczas B będzie mógł użyć tabeli tymczasowej utworzonej przez A.
Jednak ogólnie uważa się, że dobrą praktyką kodowania jest jawne usuwanie każdej utworzonej tabeli tymczasowej.
źródło
select * into #temp
ale za drugim razem wykonanie powoduje błąd: „Tabela #temp już istnieje w bazie danych” .Potrzeba
SELECT ... INTO
musi być wybrana z CTE.źródło
Jak używać TempTable w procedurze składowanej?
Oto kroki:
UTWÓRZ TABELĘ TEMP
WSTAW DANE WYBORU TEMPERATURY DO TABELI TEMP
SELECT TEMP TABLE (Możesz teraz użyć tego zapytania wybierającego)
KROK KOŃCOWY UPUŚĆ STÓŁ
Mam nadzieję, że to pomoże. Proste i przejrzyste :)
źródło
Tutaj za pomocą klauzuli into tabela jest tworzona bezpośrednio
źródło
Oto jedna niewielka zmiana w odpowiedziach zapytania, które tworzy tabelę po wykonaniu (tj. Nie musisz najpierw tworzyć tabeli):
źródło